KILLED proof of input_KMqz6lrX9C.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), 0 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), 58 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 289 ms] (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 149 ms] (18) BEST (19) proven lower bound (20) LowerBoundPropagationProof [FINISHED, 0 ms] (21) BOUNDS(n^1, INF) (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 57 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 98.5 s] (26) typed CpxTrs (27) RewriteLemmaProof [LOWER BOUND(ID), 27 ms] (28) typed CpxTrs (29) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (30) CpxWeightedTrs (31) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (32) CpxTypedWeightedTrs (33) CompletionProof [UPPER BOUND(ID), 0 ms] (34) CpxTypedWeightedCompleteTrs (35) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (36) CpxTypedWeightedCompleteTrs (37) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (38) CpxRNTS (39) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (40) CpxRNTS (41) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (42) CpxRNTS (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (44) CpxRNTS (45) IntTrsBoundProof [UPPER BOUND(ID), 259 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 109 ms] (48) CpxRNTS (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 141 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 35 ms] (54) CpxRNTS (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 295 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 137 ms] (60) CpxRNTS (61) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 130 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (66) CpxRNTS (67) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 140 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (72) CpxRNTS (73) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 250 ms] (76) CpxRNTS (77) IntTrsBoundProof [UPPER BOUND(ID), 84 ms] (78) CpxRNTS (79) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (80) CpxRNTS (81) IntTrsBoundProof [UPPER BOUND(ID), 106 ms] (82) CpxRNTS (83) IntTrsBoundProof [UPPER BOUND(ID), 21 ms] (84) CpxRNTS (85) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (86) CpxRNTS (87) IntTrsBoundProof [UPPER BOUND(ID), 17.9 s] (88) CpxRNTS (89) IntTrsBoundProof [UPPER BOUND(ID), 13.9 s] (90) CpxRNTS (91) CompletionProof [UPPER BOUND(ID), 0 ms] (92) CpxTypedWeightedCompleteTrs (93) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (94) CpxRNTS (95) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (96) CdtProblem (97) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (98) CdtProblem (99) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (100) CdtProblem (101) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CdtProblem (103) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (104) CdtProblem (105) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CdtProblem (109) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (110) CpxRelTRS (111) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (112) CpxTRS (113) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (114) CpxWeightedTrs (115) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (116) CpxTypedWeightedTrs (117) CompletionProof [UPPER BOUND(ID), 0 ms] (118) CpxTypedWeightedCompleteTrs (119) NarrowingProof [BOTH BOUNDS(ID, ID), 3 ms] (120) CpxTypedWeightedCompleteTrs (121) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 14 ms] (122) CpxRNTS (123) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (124) CpxRNTS (125) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (126) CpxRNTS (127) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (128) CpxRNTS (129) IntTrsBoundProof [UPPER BOUND(ID), 89 ms] (130) CpxRNTS (131) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] (132) CpxRNTS (133) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (134) CpxRNTS (135) IntTrsBoundProof [UPPER BOUND(ID), 259 ms] (136) CpxRNTS (137) IntTrsBoundProof [UPPER BOUND(ID), 85 ms] (138) CpxRNTS (139) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (140) CpxRNTS (141) IntTrsBoundProof [UPPER BOUND(ID), 150 ms] (142) CpxRNTS (143) IntTrsBoundProof [UPPER BOUND(ID), 22 ms] (144) CpxRNTS (145) ResultPropagationProof [UPPER BOUND(ID), 1 ms] (146) CpxRNTS (147) IntTrsBoundProof [UPPER BOUND(ID), 109 ms] (148) CpxRNTS (149) IntTrsBoundProof [UPPER BOUND(ID), 12 ms] (150) CpxRNTS (151) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (152) CpxRNTS (153) IntTrsBoundProof [UPPER BOUND(ID), 380 ms] (154) CpxRNTS (155) IntTrsBoundProof [UPPER BOUND(ID), 54 ms] (156) CpxRNTS (157) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (158) CpxRNTS (159) IntTrsBoundProof [UPPER BOUND(ID), 240 ms] (160) CpxRNTS (161) IntTrsBoundProof [UPPER BOUND(ID), 14 ms] (162) CpxRNTS (163) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (164) CpxRNTS (165) IntTrsBoundProof [UPPER BOUND(ID), 97 ms] (166) CpxRNTS (167) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (168) CpxRNTS (169) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (170) CpxRNTS (171) IntTrsBoundProof [UPPER BOUND(ID), 238 ms] (172) CpxRNTS (173) IntTrsBoundProof [UPPER BOUND(ID), 72 ms] (174) CpxRNTS (175) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (176) CpxRNTS (177) IntTrsBoundProof [UPPER BOUND(ID), 159 ms] (178) CpxRNTS (179) IntTrsBoundProof [UPPER BOUND(ID), 82 ms] (180) CpxRNTS (181) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (182) CpxRNTS (183) IntTrsBoundProof [UPPER BOUND(ID), 35.8 s] (184) CpxRNTS (185) IntTrsBoundProof [UPPER BOUND(ID), 13.1 s] (186) CpxRNTS (187) CompletionProof [UPPER BOUND(ID), 0 ms] (188) CpxTypedWeightedCompleteTrs (189) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (190) CpxRNTS (191) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (194) CdtProblem (195) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 38 ms] (204) CdtProblem (205) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 35 ms] (206) CdtProblem (207) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CdtProblem (211) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtUsableRulesProof [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) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 56 ms] (222) CdtProblem (223) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 36 ms] (224) CdtProblem (225) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (230) CdtProblem (231) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (240) CdtProblem (241) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 50 ms] (242) CdtProblem (243) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (244) CdtProblem (245) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (248) CdtProblem (249) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (250) CdtProblem (251) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (252) CdtProblem (253) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem (259) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 40 ms] (260) CdtProblem (261) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 39 ms] (262) CdtProblem (263) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (264) CdtProblem (265) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (266) CdtProblem (267) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (268) CdtProblem (269) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (270) CdtProblem (271) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (272) CdtProblem (273) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (274) CdtProblem (275) CdtNarrowingProof [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) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (282) CdtProblem (283) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (284) CdtProblem (285) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (286) CdtProblem (287) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (288) CdtProblem (289) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (290) CdtProblem (291) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (292) CdtProblem (293) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 42 ms] (294) CdtProblem (295) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (296) CdtProblem (297) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (298) CdtProblem (299) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (300) CdtProblem (301) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (302) CdtProblem (303) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (304) CdtProblem (305) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (306) CdtProblem (307) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (308) CdtProblem (309) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (310) CdtProblem (311) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (312) CdtProblem (313) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (314) CdtProblem (315) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (316) CdtProblem (317) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (318) CdtProblem (319) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (320) CdtProblem (321) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (322) CdtProblem (323) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (324) CdtProblem (325) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (326) CdtProblem (327) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (328) CdtProblem (329) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (330) 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: times(x, y) -> sum(generate(x, y)) generate(x, y) -> gen(x, y, 0) gen(x, y, z) -> if(ge(z, x), x, y, z) if(true, x, y, z) -> nil if(false, x, y, z) -> cons(y, gen(x, y, s(z))) sum(xs) -> sum2(xs, 0) sum2(xs, y) -> ifsum(isNil(xs), isZero(head(xs)), xs, y) ifsum(true, b, xs, y) -> y ifsum(false, b, xs, y) -> ifsum2(b, xs, y) ifsum2(true, xs, y) -> sum2(tail(xs), y) ifsum2(false, xs, y) -> sum2(cons(p(head(xs)), tail(xs)), s(y)) isNil(nil) -> true isNil(cons(x, xs)) -> false tail(nil) -> nil tail(cons(x, xs)) -> xs head(cons(x, xs)) -> x head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(x))) -> isZero(s(x)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(x))) -> s(p(s(x))) ge(x, 0) -> true ge(0, s(y)) -> false ge(s(x), s(y)) -> ge(x, y) a -> c a -> d 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: times(x, y) -> sum(generate(x, y)) generate(x, y) -> gen(x, y, 0') gen(x, y, z) -> if(ge(z, x), x, y, z) if(true, x, y, z) -> nil if(false, x, y, z) -> cons(y, gen(x, y, s(z))) sum(xs) -> sum2(xs, 0') sum2(xs, y) -> ifsum(isNil(xs), isZero(head(xs)), xs, y) ifsum(true, b, xs, y) -> y ifsum(false, b, xs, y) -> ifsum2(b, xs, y) ifsum2(true, xs, y) -> sum2(tail(xs), y) ifsum2(false, xs, y) -> sum2(cons(p(head(xs)), tail(xs)), s(y)) isNil(nil) -> true isNil(cons(x, xs)) -> false tail(nil) -> nil tail(cons(x, xs)) -> xs head(cons(x, xs)) -> x head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(x))) -> isZero(s(x)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(x))) -> s(p(s(x))) ge(x, 0') -> true ge(0', s(y)) -> false ge(s(x), s(y)) -> ge(x, y) a -> c a -> d 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: times(x, y) -> sum(generate(x, y)) generate(x, y) -> gen(x, y, 0) gen(x, y, z) -> if(ge(z, x), x, y, z) if(true, x, y, z) -> nil if(false, x, y, z) -> cons(y, gen(x, y, s(z))) sum(xs) -> sum2(xs, 0) sum2(xs, y) -> ifsum(isNil(xs), isZero(head(xs)), xs, y) ifsum(true, b, xs, y) -> y ifsum(false, b, xs, y) -> ifsum2(b, xs, y) ifsum2(true, xs, y) -> sum2(tail(xs), y) ifsum2(false, xs, y) -> sum2(cons(p(head(xs)), tail(xs)), s(y)) isNil(nil) -> true isNil(cons(x, xs)) -> false tail(nil) -> nil tail(cons(x, xs)) -> xs head(cons(x, xs)) -> x head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(x))) -> isZero(s(x)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(x))) -> s(p(s(x))) ge(x, 0) -> true ge(0, s(y)) -> false ge(s(x), s(y)) -> ge(x, y) a -> c a -> d 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: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0) -> c20 ISZERO(s(0)) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0) -> c23 P(s(0)) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0) -> c26 GE(0, s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 S tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0) -> c20 ISZERO(s(0)) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0) -> c23 P(s(0)) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0) -> c26 GE(0, s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 K tuples:none Defined Rule Symbols: times_2, generate_2, gen_3, if_4, sum_1, sum2_2, ifsum_4, ifsum2_3, isNil_1, tail_1, head_1, isZero_1, p_1, ge_2, a Defined Pair Symbols: TIMES_2, GENERATE_2, GEN_3, IF_4, SUM_1, SUM2_2, IFSUM_4, IFSUM2_3, ISNIL_1, TAIL_1, HEAD_1, ISZERO_1, P_1, GE_2, A Compound Symbols: c1_2, c2_1, c3_2, c4, c5_1, c6_1, c7_2, c8_3, c9, c10_1, c11_2, c12_3, c13_2, c14, c15, c16, c17, c18, c19, c20, c21, c22_1, c23, c24, c25_1, c26, c27, c28_1, c29, c30 ---------------------------------------- (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: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0) -> c20 ISZERO(s(0)) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0) -> c23 P(s(0)) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0) -> c26 GE(0, s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 The (relative) TRS S consists of the following rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d 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: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 The (relative) TRS S consists of the following rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Rewrite Strategy: INNERMOST ---------------------------------------- (11) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (12) Obligation: Innermost TRS: Rules: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 ---------------------------------------- (13) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: GEN, ge, GE, SUM2, isZero, ISZERO, p, P, gen, sum2 They will be analysed ascendingly in the following order: ge < GEN GE < GEN ge < gen isZero < SUM2 ISZERO < SUM2 p < SUM2 P < SUM2 isZero < sum2 p < sum2 ---------------------------------------- (14) Obligation: Innermost TRS: Rules: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 Generator Equations: gen_0':s:error20_31(0) <=> 0' gen_0':s:error20_31(+(x, 1)) <=> s(gen_0':s:error20_31(x)) gen_cons:nil21_31(0) <=> nil gen_cons:nil21_31(+(x, 1)) <=> cons(0', gen_cons:nil21_31(x)) gen_c26:c27:c2822_31(0) <=> c26 gen_c26:c27:c2822_31(+(x, 1)) <=> c28(gen_c26:c27:c2822_31(x)) gen_c20:c21:c2223_31(0) <=> c20 gen_c20:c21:c2223_31(+(x, 1)) <=> c22(gen_c20:c21:c2223_31(x)) gen_c23:c24:c2524_31(0) <=> c23 gen_c23:c24:c2524_31(+(x, 1)) <=> c25(gen_c23:c24:c2524_31(x)) The following defined symbols remain to be analysed: ge, GEN, GE, SUM2, isZero, ISZERO, p, P, gen, sum2 They will be analysed ascendingly in the following order: ge < GEN GE < GEN ge < gen isZero < SUM2 ISZERO < SUM2 p < SUM2 P < SUM2 isZero < sum2 p < sum2 ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) -> true, rt in Omega(0) Induction Base: ge(gen_0':s:error20_31(0), gen_0':s:error20_31(0)) ->_R^Omega(0) true Induction Step: ge(gen_0':s:error20_31(+(n26_31, 1)), gen_0':s:error20_31(+(n26_31, 1))) ->_R^Omega(0) ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) ->_IH true We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (16) Obligation: Innermost TRS: Rules: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 Lemmas: ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) -> true, rt in Omega(0) Generator Equations: gen_0':s:error20_31(0) <=> 0' gen_0':s:error20_31(+(x, 1)) <=> s(gen_0':s:error20_31(x)) gen_cons:nil21_31(0) <=> nil gen_cons:nil21_31(+(x, 1)) <=> cons(0', gen_cons:nil21_31(x)) gen_c26:c27:c2822_31(0) <=> c26 gen_c26:c27:c2822_31(+(x, 1)) <=> c28(gen_c26:c27:c2822_31(x)) gen_c20:c21:c2223_31(0) <=> c20 gen_c20:c21:c2223_31(+(x, 1)) <=> c22(gen_c20:c21:c2223_31(x)) gen_c23:c24:c2524_31(0) <=> c23 gen_c23:c24:c2524_31(+(x, 1)) <=> c25(gen_c23:c24:c2524_31(x)) The following defined symbols remain to be analysed: GE, GEN, SUM2, isZero, ISZERO, p, P, gen, sum2 They will be analysed ascendingly in the following order: GE < GEN isZero < SUM2 ISZERO < SUM2 p < SUM2 P < SUM2 isZero < sum2 p < sum2 ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: GE(gen_0':s:error20_31(n648_31), gen_0':s:error20_31(n648_31)) -> gen_c26:c27:c2822_31(n648_31), rt in Omega(1 + n648_31) Induction Base: GE(gen_0':s:error20_31(0), gen_0':s:error20_31(0)) ->_R^Omega(1) c26 Induction Step: GE(gen_0':s:error20_31(+(n648_31, 1)), gen_0':s:error20_31(+(n648_31, 1))) ->_R^Omega(1) c28(GE(gen_0':s:error20_31(n648_31), gen_0':s:error20_31(n648_31))) ->_IH c28(gen_c26:c27:c2822_31(c649_31)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (18) Complex Obligation (BEST) ---------------------------------------- (19) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 Lemmas: ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) -> true, rt in Omega(0) Generator Equations: gen_0':s:error20_31(0) <=> 0' gen_0':s:error20_31(+(x, 1)) <=> s(gen_0':s:error20_31(x)) gen_cons:nil21_31(0) <=> nil gen_cons:nil21_31(+(x, 1)) <=> cons(0', gen_cons:nil21_31(x)) gen_c26:c27:c2822_31(0) <=> c26 gen_c26:c27:c2822_31(+(x, 1)) <=> c28(gen_c26:c27:c2822_31(x)) gen_c20:c21:c2223_31(0) <=> c20 gen_c20:c21:c2223_31(+(x, 1)) <=> c22(gen_c20:c21:c2223_31(x)) gen_c23:c24:c2524_31(0) <=> c23 gen_c23:c24:c2524_31(+(x, 1)) <=> c25(gen_c23:c24:c2524_31(x)) The following defined symbols remain to be analysed: GE, GEN, SUM2, isZero, ISZERO, p, P, gen, sum2 They will be analysed ascendingly in the following order: GE < GEN isZero < SUM2 ISZERO < SUM2 p < SUM2 P < SUM2 isZero < sum2 p < sum2 ---------------------------------------- (20) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (21) BOUNDS(n^1, INF) ---------------------------------------- (22) Obligation: Innermost TRS: Rules: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 Lemmas: ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) -> true, rt in Omega(0) GE(gen_0':s:error20_31(n648_31), gen_0':s:error20_31(n648_31)) -> gen_c26:c27:c2822_31(n648_31), rt in Omega(1 + n648_31) Generator Equations: gen_0':s:error20_31(0) <=> 0' gen_0':s:error20_31(+(x, 1)) <=> s(gen_0':s:error20_31(x)) gen_cons:nil21_31(0) <=> nil gen_cons:nil21_31(+(x, 1)) <=> cons(0', gen_cons:nil21_31(x)) gen_c26:c27:c2822_31(0) <=> c26 gen_c26:c27:c2822_31(+(x, 1)) <=> c28(gen_c26:c27:c2822_31(x)) gen_c20:c21:c2223_31(0) <=> c20 gen_c20:c21:c2223_31(+(x, 1)) <=> c22(gen_c20:c21:c2223_31(x)) gen_c23:c24:c2524_31(0) <=> c23 gen_c23:c24:c2524_31(+(x, 1)) <=> c25(gen_c23:c24:c2524_31(x)) The following defined symbols remain to be analysed: GEN, SUM2, isZero, ISZERO, p, P, gen, sum2 They will be analysed ascendingly in the following order: isZero < SUM2 ISZERO < SUM2 p < SUM2 P < SUM2 isZero < sum2 p < sum2 ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: isZero(gen_0':s:error20_31(+(1, n2022_31))) -> false, rt in Omega(0) Induction Base: isZero(gen_0':s:error20_31(+(1, 0))) ->_R^Omega(0) false Induction Step: isZero(gen_0':s:error20_31(+(1, +(n2022_31, 1)))) ->_R^Omega(0) isZero(s(gen_0':s:error20_31(n2022_31))) ->_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: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 Lemmas: ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) -> true, rt in Omega(0) GE(gen_0':s:error20_31(n648_31), gen_0':s:error20_31(n648_31)) -> gen_c26:c27:c2822_31(n648_31), rt in Omega(1 + n648_31) isZero(gen_0':s:error20_31(+(1, n2022_31))) -> false, rt in Omega(0) Generator Equations: gen_0':s:error20_31(0) <=> 0' gen_0':s:error20_31(+(x, 1)) <=> s(gen_0':s:error20_31(x)) gen_cons:nil21_31(0) <=> nil gen_cons:nil21_31(+(x, 1)) <=> cons(0', gen_cons:nil21_31(x)) gen_c26:c27:c2822_31(0) <=> c26 gen_c26:c27:c2822_31(+(x, 1)) <=> c28(gen_c26:c27:c2822_31(x)) gen_c20:c21:c2223_31(0) <=> c20 gen_c20:c21:c2223_31(+(x, 1)) <=> c22(gen_c20:c21:c2223_31(x)) gen_c23:c24:c2524_31(0) <=> c23 gen_c23:c24:c2524_31(+(x, 1)) <=> c25(gen_c23:c24:c2524_31(x)) The following defined symbols remain to be analysed: ISZERO, SUM2, p, P, gen, sum2 They will be analysed ascendingly in the following order: ISZERO < SUM2 p < SUM2 P < SUM2 p < sum2 ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: ISZERO(gen_0':s:error20_31(+(2, n2323_31))) -> *25_31, rt in Omega(n2323_31) Induction Base: ISZERO(gen_0':s:error20_31(+(2, 0))) Induction Step: ISZERO(gen_0':s:error20_31(+(2, +(n2323_31, 1)))) ->_R^Omega(1) c22(ISZERO(s(gen_0':s:error20_31(+(1, n2323_31))))) ->_IH c22(*25_31) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (26) Obligation: Innermost TRS: Rules: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 Lemmas: ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) -> true, rt in Omega(0) GE(gen_0':s:error20_31(n648_31), gen_0':s:error20_31(n648_31)) -> gen_c26:c27:c2822_31(n648_31), rt in Omega(1 + n648_31) isZero(gen_0':s:error20_31(+(1, n2022_31))) -> false, rt in Omega(0) ISZERO(gen_0':s:error20_31(+(2, n2323_31))) -> *25_31, rt in Omega(n2323_31) Generator Equations: gen_0':s:error20_31(0) <=> 0' gen_0':s:error20_31(+(x, 1)) <=> s(gen_0':s:error20_31(x)) gen_cons:nil21_31(0) <=> nil gen_cons:nil21_31(+(x, 1)) <=> cons(0', gen_cons:nil21_31(x)) gen_c26:c27:c2822_31(0) <=> c26 gen_c26:c27:c2822_31(+(x, 1)) <=> c28(gen_c26:c27:c2822_31(x)) gen_c20:c21:c2223_31(0) <=> c20 gen_c20:c21:c2223_31(+(x, 1)) <=> c22(gen_c20:c21:c2223_31(x)) gen_c23:c24:c2524_31(0) <=> c23 gen_c23:c24:c2524_31(+(x, 1)) <=> c25(gen_c23:c24:c2524_31(x)) The following defined symbols remain to be analysed: p, SUM2, P, gen, sum2 They will be analysed ascendingly in the following order: p < SUM2 P < SUM2 p < sum2 ---------------------------------------- (27) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: p(gen_0':s:error20_31(+(1, n75289_31))) -> gen_0':s:error20_31(n75289_31), rt in Omega(0) Induction Base: p(gen_0':s:error20_31(+(1, 0))) ->_R^Omega(0) 0' Induction Step: p(gen_0':s:error20_31(+(1, +(n75289_31, 1)))) ->_R^Omega(0) s(p(s(gen_0':s:error20_31(n75289_31)))) ->_IH s(gen_0':s:error20_31(c75290_31)) 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: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0')) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0')) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0') -> c20 ISZERO(s(0')) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0') -> c23 P(s(0')) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0') -> c26 GE(0', s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0') gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0') sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0') -> true isZero(s(0')) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0') -> s(s(0')) p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0') -> true ge(0', s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Types: TIMES :: 0':s:error -> 0':s:error -> c1 c1 :: c6 -> c2 -> c1 SUM :: cons:nil -> c6 generate :: 0':s:error -> 0':s:error -> cons:nil GENERATE :: 0':s:error -> 0':s:error -> c2 c2 :: c3 -> c2 GEN :: 0':s:error -> 0':s:error -> 0':s:error -> c3 0' :: 0':s:error c3 :: c4:c5 -> c26:c27:c28 -> c3 IF :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> c4:c5 ge :: 0':s:error -> 0':s:error -> true:false GE :: 0':s:error -> 0':s:error -> c26:c27:c28 true :: true:false c4 :: c4:c5 false :: true:false c5 :: c3 -> c4:c5 s :: 0':s:error -> 0':s:error c6 :: c7:c8 -> c6 SUM2 :: cons:nil -> 0':s:error -> c7:c8 c7 :: c9:c10 -> c14:c15 -> c7:c8 IFSUM :: true:false -> true:false -> cons:nil -> 0':s:error -> c9:c10 isNil :: cons:nil -> true:false isZero :: 0':s:error -> true:false head :: cons:nil -> 0':s:error ISNIL :: cons:nil -> c14:c15 c8 :: c9:c10 -> c20:c21:c22 -> c18:c19 -> c7:c8 ISZERO :: 0':s:error -> c20:c21:c22 HEAD :: cons:nil -> c18:c19 c9 :: c9:c10 c10 :: c11:c12:c13 -> c9:c10 IFSUM2 :: true:false -> cons:nil -> 0':s:error -> c11:c12:c13 c11 :: c7:c8 -> c16:c17 -> c11:c12:c13 tail :: cons:nil -> cons:nil TAIL :: cons:nil -> c16:c17 c12 :: c7:c8 -> c23:c24:c25 -> c18:c19 -> c11:c12:c13 cons :: 0':s:error -> cons:nil -> cons:nil p :: 0':s:error -> 0':s:error P :: 0':s:error -> c23:c24:c25 c13 :: c7:c8 -> c16:c17 -> c11:c12:c13 nil :: cons:nil c14 :: c14:c15 c15 :: c14:c15 c16 :: c16:c17 c17 :: c16:c17 c18 :: c18:c19 c19 :: c18:c19 c20 :: c20:c21:c22 c21 :: c20:c21:c22 c22 :: c20:c21:c22 -> c20:c21:c22 c23 :: c23:c24:c25 c24 :: c23:c24:c25 c25 :: c23:c24:c25 -> c23:c24:c25 c26 :: c26:c27:c28 c27 :: c26:c27:c28 c28 :: c26:c27:c28 -> c26:c27:c28 A :: c29:c30 c29 :: c29:c30 c30 :: c29:c30 times :: 0':s:error -> 0':s:error -> 0':s:error sum :: cons:nil -> 0':s:error gen :: 0':s:error -> 0':s:error -> 0':s:error -> cons:nil if :: true:false -> 0':s:error -> 0':s:error -> 0':s:error -> cons:nil sum2 :: cons:nil -> 0':s:error -> 0':s:error ifsum :: true:false -> true:false -> cons:nil -> 0':s:error -> 0':s:error ifsum2 :: true:false -> cons:nil -> 0':s:error -> 0':s:error error :: 0':s:error a :: c:d c :: c:d d :: c:d hole_c11_31 :: c1 hole_0':s:error2_31 :: 0':s:error hole_c63_31 :: c6 hole_c24_31 :: c2 hole_cons:nil5_31 :: cons:nil hole_c36_31 :: c3 hole_c4:c57_31 :: c4:c5 hole_c26:c27:c288_31 :: c26:c27:c28 hole_true:false9_31 :: true:false hole_c7:c810_31 :: c7:c8 hole_c9:c1011_31 :: c9:c10 hole_c14:c1512_31 :: c14:c15 hole_c20:c21:c2213_31 :: c20:c21:c22 hole_c18:c1914_31 :: c18:c19 hole_c11:c12:c1315_31 :: c11:c12:c13 hole_c16:c1716_31 :: c16:c17 hole_c23:c24:c2517_31 :: c23:c24:c25 hole_c29:c3018_31 :: c29:c30 hole_c:d19_31 :: c:d gen_0':s:error20_31 :: Nat -> 0':s:error gen_cons:nil21_31 :: Nat -> cons:nil gen_c26:c27:c2822_31 :: Nat -> c26:c27:c28 gen_c20:c21:c2223_31 :: Nat -> c20:c21:c22 gen_c23:c24:c2524_31 :: Nat -> c23:c24:c25 Lemmas: ge(gen_0':s:error20_31(n26_31), gen_0':s:error20_31(n26_31)) -> true, rt in Omega(0) GE(gen_0':s:error20_31(n648_31), gen_0':s:error20_31(n648_31)) -> gen_c26:c27:c2822_31(n648_31), rt in Omega(1 + n648_31) isZero(gen_0':s:error20_31(+(1, n2022_31))) -> false, rt in Omega(0) ISZERO(gen_0':s:error20_31(+(2, n2323_31))) -> *25_31, rt in Omega(n2323_31) p(gen_0':s:error20_31(+(1, n75289_31))) -> gen_0':s:error20_31(n75289_31), rt in Omega(0) Generator Equations: gen_0':s:error20_31(0) <=> 0' gen_0':s:error20_31(+(x, 1)) <=> s(gen_0':s:error20_31(x)) gen_cons:nil21_31(0) <=> nil gen_cons:nil21_31(+(x, 1)) <=> cons(0', gen_cons:nil21_31(x)) gen_c26:c27:c2822_31(0) <=> c26 gen_c26:c27:c2822_31(+(x, 1)) <=> c28(gen_c26:c27:c2822_31(x)) gen_c20:c21:c2223_31(0) <=> c20 gen_c20:c21:c2223_31(+(x, 1)) <=> c22(gen_c20:c21:c2223_31(x)) gen_c23:c24:c2524_31(0) <=> c23 gen_c23:c24:c2524_31(+(x, 1)) <=> c25(gen_c23:c24:c2524_31(x)) The following defined symbols remain to be analysed: P, SUM2, gen, sum2 They will be analysed ascendingly in the following order: P < SUM2 ---------------------------------------- (29) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (30) 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: times(x, y) -> sum(generate(x, y)) [1] generate(x, y) -> gen(x, y, 0) [1] gen(x, y, z) -> if(ge(z, x), x, y, z) [1] if(true, x, y, z) -> nil [1] if(false, x, y, z) -> cons(y, gen(x, y, s(z))) [1] sum(xs) -> sum2(xs, 0) [1] sum2(xs, y) -> ifsum(isNil(xs), isZero(head(xs)), xs, y) [1] ifsum(true, b, xs, y) -> y [1] ifsum(false, b, xs, y) -> ifsum2(b, xs, y) [1] ifsum2(true, xs, y) -> sum2(tail(xs), y) [1] ifsum2(false, xs, y) -> sum2(cons(p(head(xs)), tail(xs)), s(y)) [1] isNil(nil) -> true [1] isNil(cons(x, xs)) -> false [1] tail(nil) -> nil [1] tail(cons(x, xs)) -> xs [1] head(cons(x, xs)) -> x [1] head(nil) -> error [1] isZero(0) -> true [1] isZero(s(0)) -> false [1] isZero(s(s(x))) -> isZero(s(x)) [1] p(0) -> s(s(0)) [1] p(s(0)) -> 0 [1] p(s(s(x))) -> s(p(s(x))) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] a -> c [1] a -> d [1] Rewrite Strategy: INNERMOST ---------------------------------------- (31) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (32) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: times(x, y) -> sum(generate(x, y)) [1] generate(x, y) -> gen(x, y, 0) [1] gen(x, y, z) -> if(ge(z, x), x, y, z) [1] if(true, x, y, z) -> nil [1] if(false, x, y, z) -> cons(y, gen(x, y, s(z))) [1] sum(xs) -> sum2(xs, 0) [1] sum2(xs, y) -> ifsum(isNil(xs), isZero(head(xs)), xs, y) [1] ifsum(true, b, xs, y) -> y [1] ifsum(false, b, xs, y) -> ifsum2(b, xs, y) [1] ifsum2(true, xs, y) -> sum2(tail(xs), y) [1] ifsum2(false, xs, y) -> sum2(cons(p(head(xs)), tail(xs)), s(y)) [1] isNil(nil) -> true [1] isNil(cons(x, xs)) -> false [1] tail(nil) -> nil [1] tail(cons(x, xs)) -> xs [1] head(cons(x, xs)) -> x [1] head(nil) -> error [1] isZero(0) -> true [1] isZero(s(0)) -> false [1] isZero(s(s(x))) -> isZero(s(x)) [1] p(0) -> s(s(0)) [1] p(s(0)) -> 0 [1] p(s(s(x))) -> s(p(s(x))) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] a -> c [1] a -> d [1] The TRS has the following type information: times :: 0:s:error -> 0:s:error -> 0:s:error sum :: nil:cons -> 0:s:error generate :: 0:s:error -> 0:s:error -> nil:cons gen :: 0:s:error -> 0:s:error -> 0:s:error -> nil:cons 0 :: 0:s:error if :: true:false -> 0:s:error -> 0:s:error -> 0:s:error -> nil:cons ge :: 0:s:error -> 0:s:error -> true:false true :: true:false nil :: nil:cons false :: true:false cons :: 0:s:error -> nil:cons -> nil:cons s :: 0:s:error -> 0:s:error sum2 :: nil:cons -> 0:s:error -> 0:s:error ifsum :: true:false -> true:false -> nil:cons -> 0:s:error -> 0:s:error isNil :: nil:cons -> true:false isZero :: 0:s:error -> true:false head :: nil:cons -> 0:s:error ifsum2 :: true:false -> nil:cons -> 0:s:error -> 0:s:error tail :: nil:cons -> nil:cons p :: 0:s:error -> 0:s:error error :: 0:s:error a :: c:d c :: c:d d :: c:d Rewrite Strategy: INNERMOST ---------------------------------------- (33) 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: times_2 sum_1 sum2_2 ifsum_4 ifsum2_3 a (c) The following functions are completely defined: tail_1 p_1 head_1 isNil_1 isZero_1 ge_2 generate_2 gen_3 if_4 Due to the following rules being added: p(v0) -> null_p [0] isZero(v0) -> null_isZero [0] ge(v0, v1) -> null_ge [0] if(v0, v1, v2, v3) -> nil [0] And the following fresh constants: null_p, null_isZero, null_ge ---------------------------------------- (34) 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: times(x, y) -> sum(generate(x, y)) [1] generate(x, y) -> gen(x, y, 0) [1] gen(x, y, z) -> if(ge(z, x), x, y, z) [1] if(true, x, y, z) -> nil [1] if(false, x, y, z) -> cons(y, gen(x, y, s(z))) [1] sum(xs) -> sum2(xs, 0) [1] sum2(xs, y) -> ifsum(isNil(xs), isZero(head(xs)), xs, y) [1] ifsum(true, b, xs, y) -> y [1] ifsum(false, b, xs, y) -> ifsum2(b, xs, y) [1] ifsum2(true, xs, y) -> sum2(tail(xs), y) [1] ifsum2(false, xs, y) -> sum2(cons(p(head(xs)), tail(xs)), s(y)) [1] isNil(nil) -> true [1] isNil(cons(x, xs)) -> false [1] tail(nil) -> nil [1] tail(cons(x, xs)) -> xs [1] head(cons(x, xs)) -> x [1] head(nil) -> error [1] isZero(0) -> true [1] isZero(s(0)) -> false [1] isZero(s(s(x))) -> isZero(s(x)) [1] p(0) -> s(s(0)) [1] p(s(0)) -> 0 [1] p(s(s(x))) -> s(p(s(x))) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] a -> c [1] a -> d [1] p(v0) -> null_p [0] isZero(v0) -> null_isZero [0] ge(v0, v1) -> null_ge [0] if(v0, v1, v2, v3) -> nil [0] The TRS has the following type information: times :: 0:s:error:null_p -> 0:s:error:null_p -> 0:s:error:null_p sum :: nil:cons -> 0:s:error:null_p generate :: 0:s:error:null_p -> 0:s:error:null_p -> nil:cons gen :: 0:s:error:null_p -> 0:s:error:null_p -> 0:s:error:null_p -> nil:cons 0 :: 0:s:error:null_p if :: true:false:null_isZero:null_ge -> 0:s:error:null_p -> 0:s:error:null_p -> 0:s:error:null_p -> nil:cons ge :: 0:s:error:null_p -> 0:s:error:null_p -> true:false:null_isZero:null_ge true :: true:false:null_isZero:null_ge nil :: nil:cons false :: true:false:null_isZero:null_ge cons :: 0:s:error:null_p -> nil:cons -> nil:cons s :: 0:s:error:null_p -> 0:s:error:null_p sum2 :: nil:cons -> 0:s:error:null_p -> 0:s:error:null_p ifsum :: true:false:null_isZero:null_ge -> true:false:null_isZero:null_ge -> nil:cons -> 0:s:error:null_p -> 0:s:error:null_p isNil :: nil:cons -> true:false:null_isZero:null_ge isZero :: 0:s:error:null_p -> true:false:null_isZero:null_ge head :: nil:cons -> 0:s:error:null_p ifsum2 :: true:false:null_isZero:null_ge -> nil:cons -> 0:s:error:null_p -> 0:s:error:null_p tail :: nil:cons -> nil:cons p :: 0:s:error:null_p -> 0:s:error:null_p error :: 0:s:error:null_p a :: c:d c :: c:d d :: c:d null_p :: 0:s:error:null_p null_isZero :: true:false:null_isZero:null_ge null_ge :: true:false:null_isZero:null_ge Rewrite Strategy: INNERMOST ---------------------------------------- (35) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (36) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: times(x, y) -> sum(gen(x, y, 0)) [2] generate(x, y) -> gen(x, y, 0) [1] gen(0, y, z) -> if(true, 0, y, z) [2] gen(s(y'), y, 0) -> if(false, s(y'), y, 0) [2] gen(s(y''), y, s(x')) -> if(ge(x', y''), s(y''), y, s(x')) [2] gen(x, y, z) -> if(null_ge, x, y, z) [1] if(true, x, y, z) -> nil [1] if(false, x, y, z) -> cons(y, gen(x, y, s(z))) [1] sum(xs) -> sum2(xs, 0) [1] sum2(nil, y) -> ifsum(true, isZero(error), nil, y) [3] sum2(cons(x'', xs'), y) -> ifsum(false, isZero(x''), cons(x'', xs'), y) [3] ifsum(true, b, xs, y) -> y [1] ifsum(false, b, xs, y) -> ifsum2(b, xs, y) [1] ifsum2(true, nil, y) -> sum2(nil, y) [2] ifsum2(true, cons(x1, xs''), y) -> sum2(xs'', y) [2] ifsum2(false, cons(x2, xs1), y) -> sum2(cons(p(x2), xs1), s(y)) [3] ifsum2(false, nil, y) -> sum2(cons(p(error), nil), s(y)) [3] isNil(nil) -> true [1] isNil(cons(x, xs)) -> false [1] tail(nil) -> nil [1] tail(cons(x, xs)) -> xs [1] head(cons(x, xs)) -> x [1] head(nil) -> error [1] isZero(0) -> true [1] isZero(s(0)) -> false [1] isZero(s(s(x))) -> isZero(s(x)) [1] p(0) -> s(s(0)) [1] p(s(0)) -> 0 [1] p(s(s(x))) -> s(p(s(x))) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] a -> c [1] a -> d [1] p(v0) -> null_p [0] isZero(v0) -> null_isZero [0] ge(v0, v1) -> null_ge [0] if(v0, v1, v2, v3) -> nil [0] The TRS has the following type information: times :: 0:s:error:null_p -> 0:s:error:null_p -> 0:s:error:null_p sum :: nil:cons -> 0:s:error:null_p generate :: 0:s:error:null_p -> 0:s:error:null_p -> nil:cons gen :: 0:s:error:null_p -> 0:s:error:null_p -> 0:s:error:null_p -> nil:cons 0 :: 0:s:error:null_p if :: true:false:null_isZero:null_ge -> 0:s:error:null_p -> 0:s:error:null_p -> 0:s:error:null_p -> nil:cons ge :: 0:s:error:null_p -> 0:s:error:null_p -> true:false:null_isZero:null_ge true :: true:false:null_isZero:null_ge nil :: nil:cons false :: true:false:null_isZero:null_ge cons :: 0:s:error:null_p -> nil:cons -> nil:cons s :: 0:s:error:null_p -> 0:s:error:null_p sum2 :: nil:cons -> 0:s:error:null_p -> 0:s:error:null_p ifsum :: true:false:null_isZero:null_ge -> true:false:null_isZero:null_ge -> nil:cons -> 0:s:error:null_p -> 0:s:error:null_p isNil :: nil:cons -> true:false:null_isZero:null_ge isZero :: 0:s:error:null_p -> true:false:null_isZero:null_ge head :: nil:cons -> 0:s:error:null_p ifsum2 :: true:false:null_isZero:null_ge -> nil:cons -> 0:s:error:null_p -> 0:s:error:null_p tail :: nil:cons -> nil:cons p :: 0:s:error:null_p -> 0:s:error:null_p error :: 0:s:error:null_p a :: c:d c :: c:d d :: c:d null_p :: 0:s:error:null_p null_isZero :: true:false:null_isZero:null_ge null_ge :: true:false:null_isZero:null_ge Rewrite Strategy: INNERMOST ---------------------------------------- (37) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 2 nil => 0 false => 1 error => 1 c => 0 d => 1 null_p => 0 null_isZero => 0 null_ge => 0 ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(x, y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' = x, x >= 0 ge(z', z'') -{ 1 }-> 1 :|: y >= 0, z'' = 1 + y, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 gen(z', z'', z1) -{ 2 }-> if(ge(x', y''), 1 + y'', y, 1 + x') :|: z' = 1 + y'', z'' = y, y >= 0, x' >= 0, y'' >= 0, z1 = 1 + x' gen(z', z'', z1) -{ 2 }-> if(2, 0, y, z) :|: z1 = z, z >= 0, z'' = y, y >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + y', y, 0) :|: z1 = 0, z'' = y, y >= 0, y' >= 0, z' = 1 + y' gen(z', z'', z1) -{ 1 }-> if(0, x, y, z) :|: z1 = z, z >= 0, z' = x, z'' = y, x >= 0, y >= 0 generate(z', z'') -{ 1 }-> gen(x, y, 0) :|: z' = x, z'' = y, x >= 0, y >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x if(z', z'', z1, z2) -{ 0 }-> 0 :|: z2 = v3, v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, v3 >= 0, z' = v0 if(z', z'', z1, z2) -{ 1 }-> 1 + y + gen(x, y, 1 + z) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> y :|: b >= 0, xs >= 0, z2 = y, z'' = b, z' = 2, y >= 0, z1 = xs ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(b, xs, y) :|: b >= 0, xs >= 0, z2 = y, z'' = b, y >= 0, z' = 1, z1 = xs ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', y) :|: z1 = y, x1 >= 0, z' = 2, xs'' >= 0, y >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, y) :|: z'' = 0, z1 = y, z' = 2, y >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + y) :|: z1 = y, z'' = 1 + x2 + xs1, y >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + y) :|: z'' = 0, z1 = y, y >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 1 }-> isZero(1 + x) :|: x >= 0, z' = 1 + (1 + x) isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 p(z') -{ 1 }-> 1 + p(1 + x) :|: x >= 0, z' = 1 + (1 + x) p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(xs, 0) :|: xs >= 0, z' = xs sum2(z', z'') -{ 3 }-> ifsum(2, isZero(1), 0, y) :|: z'' = y, y >= 0, z' = 0 sum2(z', z'') -{ 3 }-> ifsum(1, isZero(x''), 1 + x'' + xs', y) :|: z'' = y, xs' >= 0, y >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(x, y, 0)) :|: z' = x, z'' = y, x >= 0, y >= 0 ---------------------------------------- (39) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 1 }-> isZero(1 + (z' - 2)) :|: z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 3 }-> ifsum(2, isZero(1), 0, z'') :|: z'' >= 0, z' = 0 sum2(z', z'') -{ 3 }-> ifsum(1, isZero(x''), 1 + x'' + xs', z'') :|: xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 ---------------------------------------- (41) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { isZero } { tail } { ge } { head } { isNil } { p } { a } { ifsum2, ifsum, sum2 } { if, gen } { sum } { generate } { times } ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 1 }-> isZero(1 + (z' - 2)) :|: z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 3 }-> ifsum(2, isZero(1), 0, z'') :|: z'' >= 0, z' = 0 sum2(z', z'') -{ 3 }-> ifsum(1, isZero(x''), 1 + x'' + xs', z'') :|: xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {isZero}, {tail}, {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} ---------------------------------------- (43) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 1 }-> isZero(1 + (z' - 2)) :|: z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 3 }-> ifsum(2, isZero(1), 0, z'') :|: z'' >= 0, z' = 0 sum2(z', z'') -{ 3 }-> ifsum(1, isZero(x''), 1 + x'' + xs', z'') :|: xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {isZero}, {tail}, {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} ---------------------------------------- (45) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 1 }-> isZero(1 + (z' - 2)) :|: z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 3 }-> ifsum(2, isZero(1), 0, z'') :|: z'' >= 0, z' = 0 sum2(z', z'') -{ 3 }-> ifsum(1, isZero(x''), 1 + x'' + xs', z'') :|: xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {isZero}, {tail}, {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: ?, size: O(1) [2] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 1 }-> isZero(1 + (z' - 2)) :|: z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 3 }-> ifsum(2, isZero(1), 0, z'') :|: z'' >= 0, z' = 0 sum2(z', z'') -{ 3 }-> ifsum(1, isZero(x''), 1 + x'' + xs', z'') :|: xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {tail}, {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] ---------------------------------------- (49) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {tail}, {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] ---------------------------------------- (51) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: tail after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {tail}, {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: ?, size: O(n^1) [z'] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: tail after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ---------------------------------------- (55) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ---------------------------------------- (57) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: ge after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {ge}, {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: ?, size: O(1) [2] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: ge after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(z' - 1, z'' - 1) :|: z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 2 }-> if(ge(z1 - 1, z' - 1), 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] ---------------------------------------- (61) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] ---------------------------------------- (63) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: head 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 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {head}, {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: ?, size: O(n^1) [1 + z'] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: head after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] ---------------------------------------- (67) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] ---------------------------------------- (69) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isNil after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {isNil}, {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: ?, size: O(1) [2] ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isNil after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (73) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (75) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {p}, {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: ?, size: O(n^1) [2 + z'] ---------------------------------------- (77) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (78) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(x2) + xs1, 1 + z1) :|: z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 3 }-> sum2(1 + p(1) + 0, 1 + z1) :|: z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 1 + p(1 + (z' - 2)) :|: z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: O(n^1) [2 + z'], size: O(n^1) [2 + z'] ---------------------------------------- (79) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 5 + x2 }-> sum2(1 + s3 + xs1, 1 + z1) :|: s3 >= 0, s3 <= 2 + x2, z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 6 }-> sum2(1 + s4 + 0, 1 + z1) :|: s4 >= 0, s4 <= 2 + 1, z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 2 + z' }-> 1 + s5 :|: s5 >= 0, s5 <= 2 + (1 + (z' - 2)), z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: O(n^1) [2 + z'], size: O(n^1) [2 + z'] ---------------------------------------- (81) 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 ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 5 + x2 }-> sum2(1 + s3 + xs1, 1 + z1) :|: s3 >= 0, s3 <= 2 + x2, z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 6 }-> sum2(1 + s4 + 0, 1 + z1) :|: s4 >= 0, s4 <= 2 + 1, z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 2 + z' }-> 1 + s5 :|: s5 >= 0, s5 <= 2 + (1 + (z' - 2)), z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {a}, {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: O(n^1) [2 + z'], size: O(n^1) [2 + z'] a: runtime: ?, size: O(1) [1] ---------------------------------------- (83) 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 ---------------------------------------- (84) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 5 + x2 }-> sum2(1 + s3 + xs1, 1 + z1) :|: s3 >= 0, s3 <= 2 + x2, z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 6 }-> sum2(1 + s4 + 0, 1 + z1) :|: s4 >= 0, s4 <= 2 + 1, z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 2 + z' }-> 1 + s5 :|: s5 >= 0, s5 <= 2 + (1 + (z' - 2)), z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: O(n^1) [2 + z'], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (85) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (86) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 5 + x2 }-> sum2(1 + s3 + xs1, 1 + z1) :|: s3 >= 0, s3 <= 2 + x2, z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 6 }-> sum2(1 + s4 + 0, 1 + z1) :|: s4 >= 0, s4 <= 2 + 1, z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 2 + z' }-> 1 + s5 :|: s5 >= 0, s5 <= 2 + (1 + (z' - 2)), z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: O(n^1) [2 + z'], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (87) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: ifsum2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: ifsum after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: sum2 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 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 5 + x2 }-> sum2(1 + s3 + xs1, 1 + z1) :|: s3 >= 0, s3 <= 2 + x2, z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 6 }-> sum2(1 + s4 + 0, 1 + z1) :|: s4 >= 0, s4 <= 2 + 1, z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 2 + z' }-> 1 + s5 :|: s5 >= 0, s5 <= 2 + (1 + (z' - 2)), z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: O(n^1) [2 + z'], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] ifsum2: runtime: ?, size: INF ifsum: runtime: ?, size: INF sum2: runtime: ?, size: INF ---------------------------------------- (89) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: ifsum2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (90) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 2 + z' }-> s2 :|: s2 >= 0, s2 <= 2, z' - 1 >= 0, z'' - 1 >= 0 ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' >= 0 ge(z', z'') -{ 1 }-> 1 :|: z'' - 1 >= 0, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: z' >= 0, z'' >= 0 gen(z', z'', z1) -{ 3 + z1 }-> if(s1, 1 + (z' - 1), z'', 1 + (z1 - 1)) :|: s1 >= 0, s1 <= 2, z'' >= 0, z1 - 1 >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 2 }-> if(2, 0, z'', z1) :|: z1 >= 0, z'' >= 0, z' = 0 gen(z', z'', z1) -{ 2 }-> if(1, 1 + (z' - 1), z'', 0) :|: z1 = 0, z'' >= 0, z' - 1 >= 0 gen(z', z'', z1) -{ 1 }-> if(0, z', z'', z1) :|: z1 >= 0, z' >= 0, z'' >= 0 generate(z', z'') -{ 1 }-> gen(z', z'', 0) :|: z' >= 0, z'' >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z2 >= 0, z' = 2, z'' >= 0, z1 >= 0 if(z', z'', z1, z2) -{ 0 }-> 0 :|: z' >= 0, z'' >= 0, z1 >= 0, z2 >= 0 if(z', z'', z1, z2) -{ 1 }-> 1 + z1 + gen(z'', z1, 1 + z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> z2 :|: z'' >= 0, z1 >= 0, z' = 2, z2 >= 0 ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(z'', z1, z2) :|: z'' >= 0, z1 >= 0, z2 >= 0, z' = 1 ifsum2(z', z'', z1) -{ 2 }-> sum2(xs'', z1) :|: x1 >= 0, z' = 2, xs'' >= 0, z1 >= 0, z'' = 1 + x1 + xs'' ifsum2(z', z'', z1) -{ 2 }-> sum2(0, z1) :|: z'' = 0, z' = 2, z1 >= 0 ifsum2(z', z'', z1) -{ 5 + x2 }-> sum2(1 + s3 + xs1, 1 + z1) :|: s3 >= 0, s3 <= 2 + x2, z'' = 1 + x2 + xs1, z1 >= 0, xs1 >= 0, z' = 1, x2 >= 0 ifsum2(z', z'', z1) -{ 6 }-> sum2(1 + s4 + 0, 1 + z1) :|: s4 >= 0, s4 <= 2 + 1, z'' = 0, z1 >= 0, z' = 1 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isZero(z') -{ 2 + z' }-> s'' :|: s'' >= 0, s'' <= 2, z' - 2 >= 0 isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: z' >= 0 p(z') -{ 2 + z' }-> 1 + s5 :|: s5 >= 0, s5 <= 2 + (1 + (z' - 2)), z' - 2 >= 0 p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(z', 0) :|: z' >= 0 sum2(z', z'') -{ 6 }-> ifsum(2, s, 0, z'') :|: s >= 0, s <= 2, z'' >= 0, z' = 0 sum2(z', z'') -{ 5 + x'' }-> ifsum(1, s', 1 + x'' + xs', z'') :|: s' >= 0, s' <= 2, xs' >= 0, z'' >= 0, z' = 1 + x'' + xs', x'' >= 0 tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 times(z', z'') -{ 2 }-> sum(gen(z', z'', 0)) :|: z' >= 0, z'' >= 0 Function symbols to be analyzed: {ifsum2,ifsum,sum2}, {if,gen}, {sum}, {generate}, {times} Previous analysis results are: isZero: runtime: O(n^1) [2 + z'], size: O(1) [2] tail: runtime: O(1) [1], size: O(n^1) [z'] ge: runtime: O(n^1) [2 + z'], size: O(1) [2] head: runtime: O(1) [1], size: O(n^1) [1 + z'] isNil: runtime: O(1) [1], size: O(1) [2] p: runtime: O(n^1) [2 + z'], size: O(n^1) [2 + z'] a: runtime: O(1) [1], size: O(1) [1] ifsum2: runtime: INF, size: INF ifsum: runtime: ?, size: INF sum2: runtime: ?, size: INF ---------------------------------------- (91) 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: isZero(v0) -> null_isZero [0] p(v0) -> null_p [0] ge(v0, v1) -> null_ge [0] if(v0, v1, v2, v3) -> null_if [0] ifsum(v0, v1, v2, v3) -> null_ifsum [0] ifsum2(v0, v1, v2) -> null_ifsum2 [0] isNil(v0) -> null_isNil [0] tail(v0) -> null_tail [0] head(v0) -> null_head [0] And the following fresh constants: null_isZero, null_p, null_ge, null_if, null_ifsum, null_ifsum2, null_isNil, null_tail, null_head ---------------------------------------- (92) 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: times(x, y) -> sum(generate(x, y)) [1] generate(x, y) -> gen(x, y, 0) [1] gen(x, y, z) -> if(ge(z, x), x, y, z) [1] if(true, x, y, z) -> nil [1] if(false, x, y, z) -> cons(y, gen(x, y, s(z))) [1] sum(xs) -> sum2(xs, 0) [1] sum2(xs, y) -> ifsum(isNil(xs), isZero(head(xs)), xs, y) [1] ifsum(true, b, xs, y) -> y [1] ifsum(false, b, xs, y) -> ifsum2(b, xs, y) [1] ifsum2(true, xs, y) -> sum2(tail(xs), y) [1] ifsum2(false, xs, y) -> sum2(cons(p(head(xs)), tail(xs)), s(y)) [1] isNil(nil) -> true [1] isNil(cons(x, xs)) -> false [1] tail(nil) -> nil [1] tail(cons(x, xs)) -> xs [1] head(cons(x, xs)) -> x [1] head(nil) -> error [1] isZero(0) -> true [1] isZero(s(0)) -> false [1] isZero(s(s(x))) -> isZero(s(x)) [1] p(0) -> s(s(0)) [1] p(s(0)) -> 0 [1] p(s(s(x))) -> s(p(s(x))) [1] ge(x, 0) -> true [1] ge(0, s(y)) -> false [1] ge(s(x), s(y)) -> ge(x, y) [1] a -> c [1] a -> d [1] isZero(v0) -> null_isZero [0] p(v0) -> null_p [0] ge(v0, v1) -> null_ge [0] if(v0, v1, v2, v3) -> null_if [0] ifsum(v0, v1, v2, v3) -> null_ifsum [0] ifsum2(v0, v1, v2) -> null_ifsum2 [0] isNil(v0) -> null_isNil [0] tail(v0) -> null_tail [0] head(v0) -> null_head [0] The TRS has the following type information: times :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head sum :: nil:cons:null_if:null_tail -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head generate :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> nil:cons:null_if:null_tail gen :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> nil:cons:null_if:null_tail 0 :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head if :: true:false:null_isZero:null_ge:null_isNil -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> nil:cons:null_if:null_tail ge :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> true:false:null_isZero:null_ge:null_isNil true :: true:false:null_isZero:null_ge:null_isNil nil :: nil:cons:null_if:null_tail false :: true:false:null_isZero:null_ge:null_isNil cons :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> nil:cons:null_if:null_tail -> nil:cons:null_if:null_tail s :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head sum2 :: nil:cons:null_if:null_tail -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head ifsum :: true:false:null_isZero:null_ge:null_isNil -> true:false:null_isZero:null_ge:null_isNil -> nil:cons:null_if:null_tail -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head isNil :: nil:cons:null_if:null_tail -> true:false:null_isZero:null_ge:null_isNil isZero :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> true:false:null_isZero:null_ge:null_isNil head :: nil:cons:null_if:null_tail -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head ifsum2 :: true:false:null_isZero:null_ge:null_isNil -> nil:cons:null_if:null_tail -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head tail :: nil:cons:null_if:null_tail -> nil:cons:null_if:null_tail p :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head -> 0:s:error:null_p:null_ifsum:null_ifsum2:null_head error :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head a :: c:d c :: c:d d :: c:d null_isZero :: true:false:null_isZero:null_ge:null_isNil null_p :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head null_ge :: true:false:null_isZero:null_ge:null_isNil null_if :: nil:cons:null_if:null_tail null_ifsum :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head null_ifsum2 :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head null_isNil :: true:false:null_isZero:null_ge:null_isNil null_tail :: nil:cons:null_if:null_tail null_head :: 0:s:error:null_p:null_ifsum:null_ifsum2:null_head Rewrite Strategy: INNERMOST ---------------------------------------- (93) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 2 nil => 0 false => 1 error => 1 c => 0 d => 1 null_isZero => 0 null_p => 0 null_ge => 0 null_if => 0 null_ifsum => 0 null_ifsum2 => 0 null_isNil => 0 null_tail => 0 null_head => 0 ---------------------------------------- (94) Obligation: Complexity RNTS consisting of the following rules: a -{ 1 }-> 1 :|: a -{ 1 }-> 0 :|: ge(z', z'') -{ 1 }-> ge(x, y) :|: z' = 1 + x, x >= 0, y >= 0, z'' = 1 + y ge(z', z'') -{ 1 }-> 2 :|: z'' = 0, z' = x, x >= 0 ge(z', z'') -{ 1 }-> 1 :|: y >= 0, z'' = 1 + y, z' = 0 ge(z', z'') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z'' = v1, z' = v0 gen(z', z'', z1) -{ 1 }-> if(ge(z, x), x, y, z) :|: z1 = z, z >= 0, z' = x, z'' = y, x >= 0, y >= 0 generate(z', z'') -{ 1 }-> gen(x, y, 0) :|: z' = x, z'' = y, x >= 0, y >= 0 head(z') -{ 1 }-> x :|: xs >= 0, z' = 1 + x + xs, x >= 0 head(z') -{ 1 }-> 1 :|: z' = 0 head(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 if(z', z'', z1, z2) -{ 1 }-> 0 :|: z1 = y, z >= 0, z' = 2, z2 = z, x >= 0, y >= 0, z'' = x if(z', z'', z1, z2) -{ 0 }-> 0 :|: z2 = v3, v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, v3 >= 0, z' = v0 if(z', z'', z1, z2) -{ 1 }-> 1 + y + gen(x, y, 1 + z) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1 ifsum(z', z'', z1, z2) -{ 1 }-> y :|: b >= 0, xs >= 0, z2 = y, z'' = b, z' = 2, y >= 0, z1 = xs ifsum(z', z'', z1, z2) -{ 1 }-> ifsum2(b, xs, y) :|: b >= 0, xs >= 0, z2 = y, z'' = b, y >= 0, z' = 1, z1 = xs ifsum(z', z'', z1, z2) -{ 0 }-> 0 :|: z2 = v3, v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, v3 >= 0, z' = v0 ifsum2(z', z'', z1) -{ 1 }-> sum2(tail(xs), y) :|: xs >= 0, z1 = y, z' = 2, y >= 0, z'' = xs ifsum2(z', z'', z1) -{ 1 }-> sum2(1 + p(head(xs)) + tail(xs), 1 + y) :|: xs >= 0, z1 = y, y >= 0, z'' = xs, z' = 1 ifsum2(z', z'', z1) -{ 0 }-> 0 :|: v0 >= 0, z1 = v2, v1 >= 0, z'' = v1, v2 >= 0, z' = v0 isNil(z') -{ 1 }-> 2 :|: z' = 0 isNil(z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + x + xs, x >= 0 isNil(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 isZero(z') -{ 1 }-> isZero(1 + x) :|: x >= 0, z' = 1 + (1 + x) isZero(z') -{ 1 }-> 2 :|: z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 1 + 0 isZero(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 p(z') -{ 1 }-> 0 :|: z' = 1 + 0 p(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 p(z') -{ 1 }-> 1 + p(1 + x) :|: x >= 0, z' = 1 + (1 + x) p(z') -{ 1 }-> 1 + (1 + 0) :|: z' = 0 sum(z') -{ 1 }-> sum2(xs, 0) :|: xs >= 0, z' = xs sum2(z', z'') -{ 1 }-> ifsum(isNil(xs), isZero(head(xs)), xs, y) :|: xs >= 0, z'' = y, y >= 0, z' = xs tail(z') -{ 1 }-> xs :|: xs >= 0, z' = 1 + x + xs, x >= 0 tail(z') -{ 1 }-> 0 :|: z' = 0 tail(z') -{ 0 }-> 0 :|: v0 >= 0, z' = v0 times(z', z'') -{ 1 }-> sum(generate(x, y)) :|: z' = x, z'' = y, x >= 0, y >= 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (95) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (96) Obligation: Complexity Dependency Tuples Problem Rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0) -> c20 ISZERO(s(0)) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0) -> c23 P(s(0)) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0) -> c26 GE(0, s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 S tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(true, z0, z1, z2) -> c4 IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(true, z0, z1, z2) -> c9 IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISNIL(nil) -> c14 ISNIL(cons(z0, z1)) -> c15 TAIL(nil) -> c16 TAIL(cons(z0, z1)) -> c17 HEAD(cons(z0, z1)) -> c18 HEAD(nil) -> c19 ISZERO(0) -> c20 ISZERO(s(0)) -> c21 ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(0) -> c23 P(s(0)) -> c24 P(s(s(z0))) -> c25(P(s(z0))) GE(z0, 0) -> c26 GE(0, s(z0)) -> c27 GE(s(z0), s(z1)) -> c28(GE(z0, z1)) A -> c29 A -> c30 K tuples:none Defined Rule Symbols: times_2, generate_2, gen_3, if_4, sum_1, sum2_2, ifsum_4, ifsum2_3, isNil_1, tail_1, head_1, isZero_1, p_1, ge_2, a Defined Pair Symbols: TIMES_2, GENERATE_2, GEN_3, IF_4, SUM_1, SUM2_2, IFSUM_4, IFSUM2_3, ISNIL_1, TAIL_1, HEAD_1, ISZERO_1, P_1, GE_2, A Compound Symbols: c1_2, c2_1, c3_2, c4, c5_1, c6_1, c7_2, c8_3, c9, c10_1, c11_2, c12_3, c13_2, c14, c15, c16, c17, c18, c19, c20, c21, c22_1, c23, c24, c25_1, c26, c27, c28_1, c29, c30 ---------------------------------------- (97) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 16 trailing nodes: A -> c29 IF(true, z0, z1, z2) -> c4 ISZERO(0) -> c20 HEAD(cons(z0, z1)) -> c18 ISNIL(nil) -> c14 A -> c30 ISZERO(s(0)) -> c21 GE(z0, 0) -> c26 TAIL(cons(z0, z1)) -> c17 P(0) -> c23 HEAD(nil) -> c19 TAIL(nil) -> c16 GE(0, s(z0)) -> c27 ISNIL(cons(z0, z1)) -> c15 IFSUM(true, z0, z1, z2) -> c9 P(s(0)) -> c24 ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) S tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISNIL(z0)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0)), HEAD(z0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1), TAIL(z0)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0)), HEAD(z0)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), TAIL(z0)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) K tuples:none Defined Rule Symbols: times_2, generate_2, gen_3, if_4, sum_1, sum2_2, ifsum_4, ifsum2_3, isNil_1, tail_1, head_1, isZero_1, p_1, ge_2, a Defined Pair Symbols: TIMES_2, GENERATE_2, GEN_3, IF_4, SUM_1, SUM2_2, IFSUM_4, IFSUM2_3, ISZERO_1, P_1, GE_2 Compound Symbols: c1_2, c2_1, c3_2, c5_1, c6_1, c7_2, c8_3, c10_1, c11_2, c12_3, c13_2, c22_1, c25_1, c28_1 ---------------------------------------- (99) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 5 trailing tuple parts ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) S tuples: TIMES(z0, z1) -> c1(SUM(generate(z0, z1)), GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) K tuples:none Defined Rule Symbols: times_2, generate_2, gen_3, if_4, sum_1, sum2_2, ifsum_4, ifsum2_3, isNil_1, tail_1, head_1, isZero_1, p_1, ge_2, a Defined Pair Symbols: TIMES_2, GENERATE_2, GEN_3, IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3 Compound Symbols: c1_2, c2_1, c3_2, c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c7_1, c8_2, c11_1, c12_2, c13_1 ---------------------------------------- (101) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (102) Obligation: Complexity Dependency Tuples Problem Rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Tuples: GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) TIMES(z0, z1) -> c4(GENERATE(z0, z1)) S tuples: GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) TIMES(z0, z1) -> c4(GENERATE(z0, z1)) K tuples:none Defined Rule Symbols: times_2, generate_2, gen_3, if_4, sum_1, sum2_2, ifsum_4, ifsum2_3, isNil_1, tail_1, head_1, isZero_1, p_1, ge_2, a Defined Pair Symbols: GENERATE_2, GEN_3, IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2 Compound Symbols: c2_1, c3_2, c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c7_1, c8_2, c11_1, c12_2, c13_1, c4_1 ---------------------------------------- (103) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 2 leading nodes: TIMES(z0, z1) -> c4(GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) ---------------------------------------- (104) Obligation: Complexity Dependency Tuples Problem Rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Tuples: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) S tuples: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) K tuples:none Defined Rule Symbols: times_2, generate_2, gen_3, if_4, sum_1, sum2_2, ifsum_4, ifsum2_3, isNil_1, tail_1, head_1, isZero_1, p_1, ge_2, a Defined Pair Symbols: GEN_3, IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2 Compound Symbols: c3_2, c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c7_1, c8_2, c11_1, c12_2, c13_1, c4_1 ---------------------------------------- (105) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) ---------------------------------------- (106) Obligation: Complexity Dependency Tuples Problem Rules: times(z0, z1) -> sum(generate(z0, z1)) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) isNil(nil) -> true isNil(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 head(nil) -> error isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) a -> c a -> d Tuples: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) S tuples: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: times_2, generate_2, gen_3, if_4, sum_1, sum2_2, ifsum_4, ifsum2_3, isNil_1, tail_1, head_1, isZero_1, p_1, ge_2, a Defined Pair Symbols: GEN_3, IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2 Compound Symbols: c3_2, c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c7_1, c8_2, c11_1, c12_2, c13_1, c4_1 ---------------------------------------- (107) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: times(z0, z1) -> sum(generate(z0, z1)) sum(z0) -> sum2(z0, 0) sum2(z0, z1) -> ifsum(isNil(z0), isZero(head(z0)), z0, z1) ifsum(true, z0, z1, z2) -> z2 ifsum(false, z0, z1, z2) -> ifsum2(z0, z1, z2) ifsum2(true, z0, z1) -> sum2(tail(z0), z1) ifsum2(false, z0, z1) -> sum2(cons(p(head(z0)), tail(z0)), s(z1)) a -> c a -> d ---------------------------------------- (108) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) S tuples: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: GEN_3, IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2 Compound Symbols: c3_2, c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c7_1, c8_2, c11_1, c12_2, c13_1, c4_1 ---------------------------------------- (109) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (110) 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: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) The (relative) TRS S consists of the following rules: SUM(z0) -> c6(SUM2(z0, 0)) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Rewrite Strategy: INNERMOST ---------------------------------------- (111) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (112) 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: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM(z0) -> c6(SUM2(z0, 0)) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (113) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (114) 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: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) [1] IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) [1] IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) [1] ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) [1] P(s(s(z0))) -> c25(P(s(z0))) [1] GE(s(z0), s(z1)) -> c28(GE(z0, z1)) [1] SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) [1] SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) [1] IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) [1] IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) [1] IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) [1] SUM(z0) -> c6(SUM2(z0, 0)) [0] TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] isNil(nil) -> true [0] isNil(cons(z0, z1)) -> false [0] isZero(0) -> true [0] isZero(s(0)) -> false [0] isZero(s(s(z0))) -> isZero(s(z0)) [0] head(cons(z0, z1)) -> z0 [0] head(nil) -> error [0] tail(nil) -> nil [0] tail(cons(z0, z1)) -> z1 [0] p(0) -> s(s(0)) [0] p(s(0)) -> 0 [0] p(s(s(z0))) -> s(p(s(z0))) [0] generate(z0, z1) -> gen(z0, z1, 0) [0] gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) [0] if(true, z0, z1, z2) -> nil [0] if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (115) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (116) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) [1] IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) [1] IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) [1] ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) [1] P(s(s(z0))) -> c25(P(s(z0))) [1] GE(s(z0), s(z1)) -> c28(GE(z0, z1)) [1] SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) [1] SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) [1] IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) [1] IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) [1] IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) [1] SUM(z0) -> c6(SUM2(z0, 0)) [0] TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] isNil(nil) -> true [0] isNil(cons(z0, z1)) -> false [0] isZero(0) -> true [0] isZero(s(0)) -> false [0] isZero(s(s(z0))) -> isZero(s(z0)) [0] head(cons(z0, z1)) -> z0 [0] head(nil) -> error [0] tail(nil) -> nil [0] tail(cons(z0, z1)) -> z1 [0] p(0) -> s(s(0)) [0] p(s(0)) -> 0 [0] p(s(s(z0))) -> s(p(s(z0))) [0] generate(z0, z1) -> gen(z0, z1, 0) [0] gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) [0] if(true, z0, z1, z2) -> nil [0] if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) [0] The TRS has the following type information: GEN :: s:0:error -> a -> s:0:error -> c3 c3 :: c5 -> c28 -> c3 IF :: false:true -> s:0:error -> a -> s:0:error -> c5 ge :: s:0:error -> s:0:error -> false:true GE :: s:0:error -> s:0:error -> c28 false :: false:true c5 :: c3 -> c5 s :: s:0:error -> s:0:error IFSUM :: false:true -> false:true -> cons:nil -> s:0:error -> c10 c10 :: c11:c12:c13 -> c10 IFSUM2 :: false:true -> cons:nil -> s:0:error -> c11:c12:c13 ISZERO :: s:0:error -> c22 c22 :: c22 -> c22 P :: s:0:error -> c25 c25 :: c25 -> c25 c28 :: c28 -> c28 SUM2 :: cons:nil -> s:0:error -> c7:c8 c7 :: c10 -> c7:c8 isNil :: cons:nil -> false:true isZero :: s:0:error -> false:true head :: cons:nil -> s:0:error c8 :: c10 -> c22 -> c7:c8 true :: false:true c11 :: c7:c8 -> c11:c12:c13 tail :: cons:nil -> cons:nil c12 :: c7:c8 -> c25 -> c11:c12:c13 cons :: s:0:error -> cons:nil -> cons:nil p :: s:0:error -> s:0:error c13 :: c7:c8 -> c11:c12:c13 SUM :: cons:nil -> c6 c6 :: c7:c8 -> c6 0 :: s:0:error TIMES :: s:0:error -> s:0:error -> c4 c4 :: c6 -> c4 generate :: s:0:error -> s:0:error -> cons:nil nil :: cons:nil error :: s:0:error gen :: s:0:error -> s:0:error -> s:0:error -> cons:nil if :: false:true -> s:0:error -> s:0:error -> s:0:error -> cons:nil Rewrite Strategy: INNERMOST ---------------------------------------- (117) 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: GEN_3 IF_4 IFSUM_4 ISZERO_1 P_1 GE_2 SUM2_2 IFSUM2_3 (c) The following functions are completely defined: SUM_1 TIMES_2 ge_2 isNil_1 isZero_1 head_1 tail_1 p_1 generate_2 gen_3 if_4 Due to the following rules being added: SUM(v0) -> const9 [0] TIMES(v0, v1) -> const10 [0] ge(v0, v1) -> null_ge [0] isNil(v0) -> null_isNil [0] isZero(v0) -> null_isZero [0] head(v0) -> null_head [0] tail(v0) -> nil [0] p(v0) -> null_p [0] generate(v0, v1) -> nil [0] gen(v0, v1, v2) -> nil [0] if(v0, v1, v2, v3) -> nil [0] And the following fresh constants: const9, const10, null_ge, null_isNil, null_isZero, null_head, null_p, const, const1, const2, const3, const4, const5, const6, const7, const8 ---------------------------------------- (118) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) [1] IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) [1] IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) [1] ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) [1] P(s(s(z0))) -> c25(P(s(z0))) [1] GE(s(z0), s(z1)) -> c28(GE(z0, z1)) [1] SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) [1] SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) [1] IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) [1] IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) [1] IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) [1] SUM(z0) -> c6(SUM2(z0, 0)) [0] TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] isNil(nil) -> true [0] isNil(cons(z0, z1)) -> false [0] isZero(0) -> true [0] isZero(s(0)) -> false [0] isZero(s(s(z0))) -> isZero(s(z0)) [0] head(cons(z0, z1)) -> z0 [0] head(nil) -> error [0] tail(nil) -> nil [0] tail(cons(z0, z1)) -> z1 [0] p(0) -> s(s(0)) [0] p(s(0)) -> 0 [0] p(s(s(z0))) -> s(p(s(z0))) [0] generate(z0, z1) -> gen(z0, z1, 0) [0] gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) [0] if(true, z0, z1, z2) -> nil [0] if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) [0] SUM(v0) -> const9 [0] TIMES(v0, v1) -> const10 [0] ge(v0, v1) -> null_ge [0] isNil(v0) -> null_isNil [0] isZero(v0) -> null_isZero [0] head(v0) -> null_head [0] tail(v0) -> nil [0] p(v0) -> null_p [0] generate(v0, v1) -> nil [0] gen(v0, v1, v2) -> nil [0] if(v0, v1, v2, v3) -> nil [0] The TRS has the following type information: GEN :: s:0:error:null_head:null_p -> a -> s:0:error:null_head:null_p -> c3 c3 :: c5 -> c28 -> c3 IF :: false:true:null_ge:null_isNil:null_isZero -> s:0:error:null_head:null_p -> a -> s:0:error:null_head:null_p -> c5 ge :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> false:true:null_ge:null_isNil:null_isZero GE :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> c28 false :: false:true:null_ge:null_isNil:null_isZero c5 :: c3 -> c5 s :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p IFSUM :: false:true:null_ge:null_isNil:null_isZero -> false:true:null_ge:null_isNil:null_isZero -> cons:nil -> s:0:error:null_head:null_p -> c10 c10 :: c11:c12:c13 -> c10 IFSUM2 :: false:true:null_ge:null_isNil:null_isZero -> cons:nil -> s:0:error:null_head:null_p -> c11:c12:c13 ISZERO :: s:0:error:null_head:null_p -> c22 c22 :: c22 -> c22 P :: s:0:error:null_head:null_p -> c25 c25 :: c25 -> c25 c28 :: c28 -> c28 SUM2 :: cons:nil -> s:0:error:null_head:null_p -> c7:c8 c7 :: c10 -> c7:c8 isNil :: cons:nil -> false:true:null_ge:null_isNil:null_isZero isZero :: s:0:error:null_head:null_p -> false:true:null_ge:null_isNil:null_isZero head :: cons:nil -> s:0:error:null_head:null_p c8 :: c10 -> c22 -> c7:c8 true :: false:true:null_ge:null_isNil:null_isZero c11 :: c7:c8 -> c11:c12:c13 tail :: cons:nil -> cons:nil c12 :: c7:c8 -> c25 -> c11:c12:c13 cons :: s:0:error:null_head:null_p -> cons:nil -> cons:nil p :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p c13 :: c7:c8 -> c11:c12:c13 SUM :: cons:nil -> c6:const9 c6 :: c7:c8 -> c6:const9 0 :: s:0:error:null_head:null_p TIMES :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> c4:const10 c4 :: c6:const9 -> c4:const10 generate :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil nil :: cons:nil error :: s:0:error:null_head:null_p gen :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil if :: false:true:null_ge:null_isNil:null_isZero -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil const9 :: c6:const9 const10 :: c4:const10 null_ge :: false:true:null_ge:null_isNil:null_isZero null_isNil :: false:true:null_ge:null_isNil:null_isZero null_isZero :: false:true:null_ge:null_isNil:null_isZero null_head :: s:0:error:null_head:null_p null_p :: s:0:error:null_head:null_p const :: c3 const1 :: a const2 :: c5 const3 :: c28 const4 :: c10 const5 :: c11:c12:c13 const6 :: c22 const7 :: c25 const8 :: c7:c8 Rewrite Strategy: INNERMOST ---------------------------------------- (119) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (120) 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: GEN(0, z1, z2) -> c3(IF(true, 0, z1, z2), GE(z2, 0)) [1] GEN(s(z0'), z1, 0) -> c3(IF(false, s(z0'), z1, 0), GE(0, s(z0'))) [1] GEN(s(z1'), z1, s(z0'')) -> c3(IF(ge(z0'', z1'), s(z1'), z1, s(z0'')), GE(s(z0''), s(z1'))) [1] GEN(z0, z1, z2) -> c3(IF(null_ge, z0, z1, z2), GE(z2, z0)) [1] IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) [1] IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) [1] ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) [1] P(s(s(z0))) -> c25(P(s(z0))) [1] GE(s(z0), s(z1)) -> c28(GE(z0, z1)) [1] SUM2(nil, z1) -> c7(IFSUM(true, isZero(error), nil, z1)) [1] SUM2(nil, z1) -> c7(IFSUM(true, isZero(null_head), nil, z1)) [1] SUM2(cons(z01, z1''), z1) -> c7(IFSUM(false, isZero(z01), cons(z01, z1''), z1)) [1] SUM2(cons(z01, z1''), z1) -> c7(IFSUM(false, isZero(null_head), cons(z01, z1''), z1)) [1] SUM2(cons(z02, z11), z1) -> c7(IFSUM(null_isNil, isZero(z02), cons(z02, z11), z1)) [1] SUM2(nil, z1) -> c7(IFSUM(null_isNil, isZero(error), nil, z1)) [1] SUM2(z0, z1) -> c7(IFSUM(null_isNil, isZero(null_head), z0, z1)) [1] SUM2(nil, z1) -> c8(IFSUM(true, isZero(error), nil, z1), ISZERO(error)) [1] SUM2(nil, z1) -> c8(IFSUM(true, isZero(error), nil, z1), ISZERO(null_head)) [1] SUM2(nil, z1) -> c8(IFSUM(true, isZero(null_head), nil, z1), ISZERO(error)) [1] SUM2(nil, z1) -> c8(IFSUM(true, isZero(null_head), nil, z1), ISZERO(null_head)) [1] SUM2(cons(z03, z12), z1) -> c8(IFSUM(false, isZero(z03), cons(z03, z12), z1), ISZERO(z03)) [1] SUM2(cons(z03, z12), z1) -> c8(IFSUM(false, isZero(z03), cons(z03, z12), z1), ISZERO(null_head)) [1] SUM2(cons(z03, z12), z1) -> c8(IFSUM(false, isZero(null_head), cons(z03, z12), z1), ISZERO(z03)) [1] SUM2(cons(z03, z12), z1) -> c8(IFSUM(false, isZero(null_head), cons(z03, z12), z1), ISZERO(null_head)) [1] SUM2(cons(z04, z13), z1) -> c8(IFSUM(null_isNil, isZero(z04), cons(z04, z13), z1), ISZERO(z04)) [1] SUM2(cons(z04, z13), z1) -> c8(IFSUM(null_isNil, isZero(z04), cons(z04, z13), z1), ISZERO(null_head)) [1] SUM2(nil, z1) -> c8(IFSUM(null_isNil, isZero(error), nil, z1), ISZERO(error)) [1] SUM2(nil, z1) -> c8(IFSUM(null_isNil, isZero(error), nil, z1), ISZERO(null_head)) [1] SUM2(cons(z05, z14), z1) -> c8(IFSUM(null_isNil, isZero(null_head), cons(z05, z14), z1), ISZERO(z05)) [1] SUM2(nil, z1) -> c8(IFSUM(null_isNil, isZero(null_head), nil, z1), ISZERO(error)) [1] SUM2(z0, z1) -> c8(IFSUM(null_isNil, isZero(null_head), z0, z1), ISZERO(null_head)) [1] IFSUM2(true, nil, z1) -> c11(SUM2(nil, z1)) [1] IFSUM2(true, cons(z06, z15), z1) -> c11(SUM2(z15, z1)) [1] IFSUM2(true, z0, z1) -> c11(SUM2(nil, z1)) [1] IFSUM2(false, cons(z07, z16), z1) -> c12(SUM2(cons(p(z07), z16), s(z1)), P(z07)) [1] IFSUM2(false, cons(z07, z16), z1) -> c12(SUM2(cons(p(z07), z16), s(z1)), P(null_head)) [1] IFSUM2(false, cons(z07, z16), z1) -> c12(SUM2(cons(p(z07), nil), s(z1)), P(z07)) [1] IFSUM2(false, cons(z07, z16), z1) -> c12(SUM2(cons(p(z07), nil), s(z1)), P(null_head)) [1] IFSUM2(false, nil, z1) -> c12(SUM2(cons(p(error), nil), s(z1)), P(error)) [1] IFSUM2(false, nil, z1) -> c12(SUM2(cons(p(error), nil), s(z1)), P(null_head)) [1] IFSUM2(false, nil, z1) -> c12(SUM2(cons(p(error), nil), s(z1)), P(error)) [1] IFSUM2(false, nil, z1) -> c12(SUM2(cons(p(error), nil), s(z1)), P(null_head)) [1] IFSUM2(false, nil, z1) -> c12(SUM2(cons(p(null_head), nil), s(z1)), P(error)) [1] IFSUM2(false, nil, z1) -> c12(SUM2(cons(p(null_head), nil), s(z1)), P(null_head)) [1] IFSUM2(false, cons(z08, z17), z1) -> c12(SUM2(cons(p(null_head), z17), s(z1)), P(z08)) [1] IFSUM2(false, cons(z08, z17), z1) -> c12(SUM2(cons(p(null_head), z17), s(z1)), P(null_head)) [1] IFSUM2(false, cons(z09, z18), z1) -> c12(SUM2(cons(p(null_head), nil), s(z1)), P(z09)) [1] IFSUM2(false, nil, z1) -> c12(SUM2(cons(p(null_head), nil), s(z1)), P(error)) [1] IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(null_head), nil), s(z1)), P(null_head)) [1] IFSUM2(false, cons(z010, z19), z1) -> c13(SUM2(cons(p(z010), z19), s(z1))) [1] IFSUM2(false, cons(z010, z19), z1) -> c13(SUM2(cons(p(z010), nil), s(z1))) [1] IFSUM2(false, nil, z1) -> c13(SUM2(cons(p(error), nil), s(z1))) [1] IFSUM2(false, nil, z1) -> c13(SUM2(cons(p(error), nil), s(z1))) [1] IFSUM2(false, nil, z1) -> c13(SUM2(cons(p(null_head), nil), s(z1))) [1] IFSUM2(false, cons(z011, z110), z1) -> c13(SUM2(cons(p(null_head), z110), s(z1))) [1] IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(null_head), nil), s(z1))) [1] SUM(z0) -> c6(SUM2(z0, 0)) [0] TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) [0] TIMES(z0, z1) -> c4(SUM(nil)) [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] isNil(nil) -> true [0] isNil(cons(z0, z1)) -> false [0] isZero(0) -> true [0] isZero(s(0)) -> false [0] isZero(s(s(z0))) -> isZero(s(z0)) [0] head(cons(z0, z1)) -> z0 [0] head(nil) -> error [0] tail(nil) -> nil [0] tail(cons(z0, z1)) -> z1 [0] p(0) -> s(s(0)) [0] p(s(0)) -> 0 [0] p(s(s(z0))) -> s(p(s(z0))) [0] generate(z0, z1) -> gen(z0, z1, 0) [0] gen(0, z1, z2) -> if(true, 0, z1, z2) [0] gen(s(z012), z1, 0) -> if(false, s(z012), z1, 0) [0] gen(s(z111), z1, s(z013)) -> if(ge(z013, z111), s(z111), z1, s(z013)) [0] gen(z0, z1, z2) -> if(null_ge, z0, z1, z2) [0] if(true, z0, z1, z2) -> nil [0] if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) [0] SUM(v0) -> const9 [0] TIMES(v0, v1) -> const10 [0] ge(v0, v1) -> null_ge [0] isNil(v0) -> null_isNil [0] isZero(v0) -> null_isZero [0] head(v0) -> null_head [0] tail(v0) -> nil [0] p(v0) -> null_p [0] generate(v0, v1) -> nil [0] gen(v0, v1, v2) -> nil [0] if(v0, v1, v2, v3) -> nil [0] The TRS has the following type information: GEN :: s:0:error:null_head:null_p -> a -> s:0:error:null_head:null_p -> c3 c3 :: c5 -> c28 -> c3 IF :: false:true:null_ge:null_isNil:null_isZero -> s:0:error:null_head:null_p -> a -> s:0:error:null_head:null_p -> c5 ge :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> false:true:null_ge:null_isNil:null_isZero GE :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> c28 false :: false:true:null_ge:null_isNil:null_isZero c5 :: c3 -> c5 s :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p IFSUM :: false:true:null_ge:null_isNil:null_isZero -> false:true:null_ge:null_isNil:null_isZero -> cons:nil -> s:0:error:null_head:null_p -> c10 c10 :: c11:c12:c13 -> c10 IFSUM2 :: false:true:null_ge:null_isNil:null_isZero -> cons:nil -> s:0:error:null_head:null_p -> c11:c12:c13 ISZERO :: s:0:error:null_head:null_p -> c22 c22 :: c22 -> c22 P :: s:0:error:null_head:null_p -> c25 c25 :: c25 -> c25 c28 :: c28 -> c28 SUM2 :: cons:nil -> s:0:error:null_head:null_p -> c7:c8 c7 :: c10 -> c7:c8 isNil :: cons:nil -> false:true:null_ge:null_isNil:null_isZero isZero :: s:0:error:null_head:null_p -> false:true:null_ge:null_isNil:null_isZero head :: cons:nil -> s:0:error:null_head:null_p c8 :: c10 -> c22 -> c7:c8 true :: false:true:null_ge:null_isNil:null_isZero c11 :: c7:c8 -> c11:c12:c13 tail :: cons:nil -> cons:nil c12 :: c7:c8 -> c25 -> c11:c12:c13 cons :: s:0:error:null_head:null_p -> cons:nil -> cons:nil p :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p c13 :: c7:c8 -> c11:c12:c13 SUM :: cons:nil -> c6:const9 c6 :: c7:c8 -> c6:const9 0 :: s:0:error:null_head:null_p TIMES :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> c4:const10 c4 :: c6:const9 -> c4:const10 generate :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil nil :: cons:nil error :: s:0:error:null_head:null_p gen :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil if :: false:true:null_ge:null_isNil:null_isZero -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil const9 :: c6:const9 const10 :: c4:const10 null_ge :: false:true:null_ge:null_isNil:null_isZero null_isNil :: false:true:null_ge:null_isNil:null_isZero null_isZero :: false:true:null_ge:null_isNil:null_isZero null_head :: s:0:error:null_head:null_p null_p :: s:0:error:null_head:null_p const :: c3 const1 :: a const2 :: c5 const3 :: c28 const4 :: c10 const5 :: c11:c12:c13 const6 :: c22 const7 :: c25 const8 :: c7:c8 Rewrite Strategy: INNERMOST ---------------------------------------- (121) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: false => 1 true => 2 0 => 0 nil => 0 error => 1 const9 => 0 const10 => 0 null_ge => 0 null_isNil => 0 null_isZero => 0 null_head => 0 null_p => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 const4 => 0 const5 => 0 const6 => 0 const7 => 0 const8 => 0 ---------------------------------------- (122) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z0'', z1'), 1 + z1', z1, 1 + z0'') + GE(1 + z0'', 1 + z1') :|: z1 >= 0, z = 1 + z1', z'' = 1 + z0'', z1' >= 0, z' = z1, z0'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z1, z2) + GE(z2, 0) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z2 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + z0', z1, 0) + GE(0, 1 + z0') :|: z'' = 0, z1 >= 0, z0' >= 0, z' = z1, z = 1 + z0' GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z0, z1, z2) + GE(z2, z0) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z0, z1, 1 + z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z0, z1, z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z1) :|: z = 2, z15 >= 0, z1 >= 0, z06 >= 0, z' = 1 + z06 + z15, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z1) :|: z = 2, z1 >= 0, z' = 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z1) :|: z = 2, z1 >= 0, z0 >= 0, z' = z0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z1) :|: z1 >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z1) :|: z1 >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z1) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z1) :|: z011 >= 0, z110 >= 0, z1 >= 0, z = 1, z' = 1 + z011 + z110, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z1) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z1) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z1) + P(z07) :|: z1 >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z1) + P(0) :|: z1 >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z1) + P(z07) :|: z1 >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z1) + P(0) :|: z1 >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z1) + P(1) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z1) + P(0) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z1) + P(z08) :|: z08 >= 0, z1 >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z1) + P(0) :|: z08 >= 0, z1 >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z1) + P(z09) :|: z18 >= 0, z1 >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z1) + P(1) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z1) + P(0) :|: z1 >= 0, z = 1, z' = 0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z1) + P(0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) P(z) -{ 1 }-> 1 + P(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) SUM(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 SUM(z) -{ 0 }-> 1 + SUM2(z0, 0) :|: z = z0, z0 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z1) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z1) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z1) :|: z1 >= 0, z01 >= 0, z = 1 + z01 + z1'', z' = z1, z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z1) :|: z1 >= 0, z01 >= 0, z = 1 + z01 + z1'', z' = z1, z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z1) :|: z11 >= 0, z1 >= 0, z = 1 + z02 + z11, z02 >= 0, z' = z1 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z1) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z1) + ISZERO(1) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z1) + ISZERO(0) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z1) + ISZERO(1) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z1) + ISZERO(0) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z1) + ISZERO(z03) :|: z = 1 + z03 + z12, z1 >= 0, z' = z1, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z1) + ISZERO(0) :|: z = 1 + z03 + z12, z1 >= 0, z' = z1, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z1) + ISZERO(z03) :|: z = 1 + z03 + z12, z1 >= 0, z' = z1, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z1) + ISZERO(0) :|: z = 1 + z03 + z12, z1 >= 0, z' = z1, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z1) + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z1 >= 0, z' = z1, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z1) + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z1 >= 0, z' = z1, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z1) + ISZERO(1) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z1) + ISZERO(0) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z0, z1) + ISZERO(0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z1) + ISZERO(1) :|: z1 >= 0, z' = z1, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z1) + ISZERO(z05) :|: z = 1 + z05 + z14, z1 >= 0, z' = z1, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z0, z1, 0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ge(z, z') -{ 0 }-> ge(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 ge(z, z') -{ 0 }-> 2 :|: z = z0, z0 >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z0 >= 0, z' = 1 + z0, z = 0 ge(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 gen(z, z', z'') -{ 0 }-> if(ge(z013, z111), 1 + z111, z1, 1 + z013) :|: z = 1 + z111, z1 >= 0, z'' = 1 + z013, z013 >= 0, z' = z1, z111 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z1, z2) :|: z'' = z2, z1 >= 0, z' = z1, z = 0, z2 >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + z012, z1, 0) :|: z'' = 0, z1 >= 0, z' = z1, z012 >= 0, z = 1 + z012 gen(z, z', z'') -{ 0 }-> if(0, z0, z1, z2) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 generate(z, z') -{ 0 }-> gen(z0, z1, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 generate(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z1 >= 0, 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 if(z, z', z'', z3) -{ 0 }-> 1 + z1 + gen(z0, z1, 1 + z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 isZero(z) -{ 0 }-> isZero(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 p(z) -{ 0 }-> 1 + p(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ---------------------------------------- (123) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (124) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(z08) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(0) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(z09) :|: z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ 1 }-> 1 + P(1 + (z - 2)) :|: z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 ---------------------------------------- (125) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { P } { isZero } { tail } { ISZERO } { ge } { head } { isNil } { p } { GE } { IFSUM, IFSUM2, SUM2 } { if, gen } { GEN, IF } { SUM } { generate } { TIMES } ---------------------------------------- (126) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(z08) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(0) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(z09) :|: z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ 1 }-> 1 + P(1 + (z - 2)) :|: z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {P}, {isZero}, {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} ---------------------------------------- (127) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (128) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(z08) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(0) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(z09) :|: z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ 1 }-> 1 + P(1 + (z - 2)) :|: z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {P}, {isZero}, {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} ---------------------------------------- (129) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: P after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (130) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(z08) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(0) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(z09) :|: z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ 1 }-> 1 + P(1 + (z - 2)) :|: z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {P}, {isZero}, {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: ?, size: O(1) [0] ---------------------------------------- (131) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: P after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (132) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(z07) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + P(0) :|: z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(z08) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + P(0) :|: z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(z09) :|: z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(1) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + P(0) :|: z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ 1 }-> 1 + P(1 + (z - 2)) :|: z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {isZero}, {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (133) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (134) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {isZero}, {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (135) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (136) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {isZero}, {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: ?, size: O(1) [2] ---------------------------------------- (137) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (138) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z01), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z01 + z1'', z') :|: z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z02), 1 + z02 + z11, z') :|: z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, isZero(0), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(z03), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(z03) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, isZero(0), 1 + z03 + z12, z') + ISZERO(0) :|: z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(z04) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(z04), 1 + z04 + z13, z') + ISZERO(0) :|: z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(1), 0, z') + ISZERO(0) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), z, z') + ISZERO(0) :|: z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 0, z') + ISZERO(1) :|: z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, isZero(0), 1 + z05 + z14, z') + ISZERO(z05) :|: z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> isZero(1 + (z - 2)) :|: z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (139) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (140) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s18, 0, z') + ISZERO(1) :|: s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + ISZERO(0) :|: s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s20, 0, z') + ISZERO(1) :|: s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + ISZERO(0) :|: s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + ISZERO(z03) :|: s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + ISZERO(0) :|: s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + ISZERO(z03) :|: s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + ISZERO(0) :|: s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + ISZERO(z04) :|: s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + ISZERO(0) :|: s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s28, 0, z') + ISZERO(1) :|: s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + ISZERO(0) :|: s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + ISZERO(z05) :|: s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s31, 0, z') + ISZERO(1) :|: s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + ISZERO(0) :|: s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (141) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: tail 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: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s18, 0, z') + ISZERO(1) :|: s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + ISZERO(0) :|: s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s20, 0, z') + ISZERO(1) :|: s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + ISZERO(0) :|: s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + ISZERO(z03) :|: s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + ISZERO(0) :|: s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + ISZERO(z03) :|: s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + ISZERO(0) :|: s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + ISZERO(z04) :|: s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + ISZERO(0) :|: s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s28, 0, z') + ISZERO(1) :|: s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + ISZERO(0) :|: s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + ISZERO(z05) :|: s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s31, 0, z') + ISZERO(1) :|: s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + ISZERO(0) :|: s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: ?, size: O(n^1) [z] ---------------------------------------- (143) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: tail after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (144) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s18, 0, z') + ISZERO(1) :|: s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + ISZERO(0) :|: s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s20, 0, z') + ISZERO(1) :|: s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + ISZERO(0) :|: s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + ISZERO(z03) :|: s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + ISZERO(0) :|: s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + ISZERO(z03) :|: s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + ISZERO(0) :|: s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + ISZERO(z04) :|: s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + ISZERO(0) :|: s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s28, 0, z') + ISZERO(1) :|: s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + ISZERO(0) :|: s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + ISZERO(z05) :|: s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s31, 0, z') + ISZERO(1) :|: s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + ISZERO(0) :|: s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (145) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (146) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s18, 0, z') + ISZERO(1) :|: s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + ISZERO(0) :|: s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s20, 0, z') + ISZERO(1) :|: s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + ISZERO(0) :|: s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + ISZERO(z03) :|: s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + ISZERO(0) :|: s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + ISZERO(z03) :|: s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + ISZERO(0) :|: s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + ISZERO(z04) :|: s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + ISZERO(0) :|: s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s28, 0, z') + ISZERO(1) :|: s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + ISZERO(0) :|: s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + ISZERO(z05) :|: s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s31, 0, z') + ISZERO(1) :|: s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + ISZERO(0) :|: s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (147) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: ISZERO after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (148) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s18, 0, z') + ISZERO(1) :|: s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + ISZERO(0) :|: s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s20, 0, z') + ISZERO(1) :|: s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + ISZERO(0) :|: s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + ISZERO(z03) :|: s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + ISZERO(0) :|: s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + ISZERO(z03) :|: s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + ISZERO(0) :|: s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + ISZERO(z04) :|: s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + ISZERO(0) :|: s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s28, 0, z') + ISZERO(1) :|: s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + ISZERO(0) :|: s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + ISZERO(z05) :|: s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s31, 0, z') + ISZERO(1) :|: s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + ISZERO(0) :|: s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {ISZERO}, {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: ?, size: O(1) [0] ---------------------------------------- (149) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: ISZERO after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (150) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + (z - 2)) :|: z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s18, 0, z') + ISZERO(1) :|: s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + ISZERO(0) :|: s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s20, 0, z') + ISZERO(1) :|: s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + ISZERO(0) :|: s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + ISZERO(z03) :|: s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + ISZERO(0) :|: s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + ISZERO(z03) :|: s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + ISZERO(0) :|: s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + ISZERO(z04) :|: s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + ISZERO(0) :|: s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s28, 0, z') + ISZERO(1) :|: s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + ISZERO(0) :|: s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + ISZERO(z05) :|: s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s31, 0, z') + ISZERO(1) :|: s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + ISZERO(0) :|: s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (151) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (152) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (153) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: ge after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (154) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {ge}, {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: ?, size: O(1) [2] ---------------------------------------- (155) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: ge after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (156) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> ge(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(ge(z'' - 1, z - 1), 1 + (z - 1), z', 1 + (z'' - 1)) :|: z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (157) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (158) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (159) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: head after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (160) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (161) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: head after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (162) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (163) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (164) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] ---------------------------------------- (165) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isNil after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (166) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {isNil}, {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: ?, size: O(1) [2] ---------------------------------------- (167) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isNil after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (168) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (169) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (170) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (171) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (172) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {p}, {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (173) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (174) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + z19, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z010) + 0, 1 + z'') :|: z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z110, 1 + z'') :|: z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') :|: z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s' :|: s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + z16, 1 + z'') + s'' :|: s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s1 :|: s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(z07) + 0, 1 + z'') + s2 :|: s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s3 :|: s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(1) + 0, 1 + z'') + s4 :|: s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s7 :|: s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + z17, 1 + z'') + s8 :|: s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s10 :|: s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s5 :|: s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s6 :|: s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + p(0) + 0, 1 + z'') + s9 :|: s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + p(1 + (z - 2)) :|: z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (175) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (176) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s65 + z19, 1 + z'') :|: s65 >= 0, s65 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s66 + 0, 1 + z'') :|: s66 >= 0, s66 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s67 + 0, 1 + z'') :|: s67 >= 0, s67 <= 2 + 1, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s68 + 0, 1 + z'') :|: s68 >= 0, s68 <= 2 + 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s69 + z110, 1 + z'') :|: s69 >= 0, s69 <= 2 + 0, z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s70 + 0, 1 + z'') :|: s70 >= 0, s70 <= 2 + 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s53 + z16, 1 + z'') + s' :|: s53 >= 0, s53 <= 2 + z07, s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s54 + z16, 1 + z'') + s'' :|: s54 >= 0, s54 <= 2 + z07, s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s55 + 0, 1 + z'') + s1 :|: s55 >= 0, s55 <= 2 + z07, s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s56 + 0, 1 + z'') + s2 :|: s56 >= 0, s56 <= 2 + z07, s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s57 + 0, 1 + z'') + s3 :|: s57 >= 0, s57 <= 2 + 1, s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s58 + 0, 1 + z'') + s4 :|: s58 >= 0, s58 <= 2 + 1, s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s59 + 0, 1 + z'') + s5 :|: s59 >= 0, s59 <= 2 + 0, s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s60 + 0, 1 + z'') + s6 :|: s60 >= 0, s60 <= 2 + 0, s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + s61 + z17, 1 + z'') + s7 :|: s61 >= 0, s61 <= 2 + 0, s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s62 + z17, 1 + z'') + s8 :|: s62 >= 0, s62 <= 2 + 0, s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + s63 + 0, 1 + z'') + s9 :|: s63 >= 0, s63 <= 2 + 0, s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s64 + 0, 1 + z'') + s10 :|: s64 >= 0, s64 <= 2 + 0, s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + s71 :|: s71 >= 0, s71 <= 2 + (1 + (z - 2)), z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (177) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: GE after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (178) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s65 + z19, 1 + z'') :|: s65 >= 0, s65 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s66 + 0, 1 + z'') :|: s66 >= 0, s66 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s67 + 0, 1 + z'') :|: s67 >= 0, s67 <= 2 + 1, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s68 + 0, 1 + z'') :|: s68 >= 0, s68 <= 2 + 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s69 + z110, 1 + z'') :|: s69 >= 0, s69 <= 2 + 0, z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s70 + 0, 1 + z'') :|: s70 >= 0, s70 <= 2 + 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s53 + z16, 1 + z'') + s' :|: s53 >= 0, s53 <= 2 + z07, s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s54 + z16, 1 + z'') + s'' :|: s54 >= 0, s54 <= 2 + z07, s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s55 + 0, 1 + z'') + s1 :|: s55 >= 0, s55 <= 2 + z07, s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s56 + 0, 1 + z'') + s2 :|: s56 >= 0, s56 <= 2 + z07, s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s57 + 0, 1 + z'') + s3 :|: s57 >= 0, s57 <= 2 + 1, s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s58 + 0, 1 + z'') + s4 :|: s58 >= 0, s58 <= 2 + 1, s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s59 + 0, 1 + z'') + s5 :|: s59 >= 0, s59 <= 2 + 0, s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s60 + 0, 1 + z'') + s6 :|: s60 >= 0, s60 <= 2 + 0, s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + s61 + z17, 1 + z'') + s7 :|: s61 >= 0, s61 <= 2 + 0, s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s62 + z17, 1 + z'') + s8 :|: s62 >= 0, s62 <= 2 + 0, s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + s63 + 0, 1 + z'') + s9 :|: s63 >= 0, s63 <= 2 + 0, s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s64 + 0, 1 + z'') + s10 :|: s64 >= 0, s64 <= 2 + 0, s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + s71 :|: s71 >= 0, s71 <= 2 + (1 + (z - 2)), z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {GE}, {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: ?, size: O(1) [0] ---------------------------------------- (179) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: GE after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (180) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 1 }-> 1 + GE(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + GE(1 + (z'' - 1), 1 + (z - 1)) :|: s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + GE(z'', 0) :|: z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(1, 1 + (z - 1), z', 0) + GE(0, 1 + (z - 1)) :|: z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(0, z, z', z'') + GE(z'', z) :|: z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s65 + z19, 1 + z'') :|: s65 >= 0, s65 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s66 + 0, 1 + z'') :|: s66 >= 0, s66 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s67 + 0, 1 + z'') :|: s67 >= 0, s67 <= 2 + 1, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s68 + 0, 1 + z'') :|: s68 >= 0, s68 <= 2 + 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s69 + z110, 1 + z'') :|: s69 >= 0, s69 <= 2 + 0, z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s70 + 0, 1 + z'') :|: s70 >= 0, s70 <= 2 + 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s53 + z16, 1 + z'') + s' :|: s53 >= 0, s53 <= 2 + z07, s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s54 + z16, 1 + z'') + s'' :|: s54 >= 0, s54 <= 2 + z07, s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s55 + 0, 1 + z'') + s1 :|: s55 >= 0, s55 <= 2 + z07, s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s56 + 0, 1 + z'') + s2 :|: s56 >= 0, s56 <= 2 + z07, s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s57 + 0, 1 + z'') + s3 :|: s57 >= 0, s57 <= 2 + 1, s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s58 + 0, 1 + z'') + s4 :|: s58 >= 0, s58 <= 2 + 1, s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s59 + 0, 1 + z'') + s5 :|: s59 >= 0, s59 <= 2 + 0, s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s60 + 0, 1 + z'') + s6 :|: s60 >= 0, s60 <= 2 + 0, s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + s61 + z17, 1 + z'') + s7 :|: s61 >= 0, s61 <= 2 + 0, s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s62 + z17, 1 + z'') + s8 :|: s62 >= 0, s62 <= 2 + 0, s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + s63 + 0, 1 + z'') + s9 :|: s63 >= 0, s63 <= 2 + 0, s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s64 + 0, 1 + z'') + s10 :|: s64 >= 0, s64 <= 2 + 0, s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + s71 :|: s71 >= 0, s71 <= 2 + (1 + (z - 2)), z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (181) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (182) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ z' }-> 1 + s76 :|: s76 >= 0, s76 <= 0, z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + s74 :|: s74 >= 0, s74 <= 0, s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + s72 :|: s72 >= 0, s72 <= 0, z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(1, 1 + (z - 1), z', 0) + s73 :|: s73 >= 0, s73 <= 0, z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(0, z, z', z'') + s75 :|: s75 >= 0, s75 <= 0, z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s65 + z19, 1 + z'') :|: s65 >= 0, s65 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s66 + 0, 1 + z'') :|: s66 >= 0, s66 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s67 + 0, 1 + z'') :|: s67 >= 0, s67 <= 2 + 1, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s68 + 0, 1 + z'') :|: s68 >= 0, s68 <= 2 + 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s69 + z110, 1 + z'') :|: s69 >= 0, s69 <= 2 + 0, z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s70 + 0, 1 + z'') :|: s70 >= 0, s70 <= 2 + 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s53 + z16, 1 + z'') + s' :|: s53 >= 0, s53 <= 2 + z07, s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s54 + z16, 1 + z'') + s'' :|: s54 >= 0, s54 <= 2 + z07, s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s55 + 0, 1 + z'') + s1 :|: s55 >= 0, s55 <= 2 + z07, s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s56 + 0, 1 + z'') + s2 :|: s56 >= 0, s56 <= 2 + z07, s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s57 + 0, 1 + z'') + s3 :|: s57 >= 0, s57 <= 2 + 1, s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s58 + 0, 1 + z'') + s4 :|: s58 >= 0, s58 <= 2 + 1, s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s59 + 0, 1 + z'') + s5 :|: s59 >= 0, s59 <= 2 + 0, s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s60 + 0, 1 + z'') + s6 :|: s60 >= 0, s60 <= 2 + 0, s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + s61 + z17, 1 + z'') + s7 :|: s61 >= 0, s61 <= 2 + 0, s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s62 + z17, 1 + z'') + s8 :|: s62 >= 0, s62 <= 2 + 0, s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + s63 + 0, 1 + z'') + s9 :|: s63 >= 0, s63 <= 2 + 0, s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s64 + 0, 1 + z'') + s10 :|: s64 >= 0, s64 <= 2 + 0, s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + s71 :|: s71 >= 0, s71 <= 2 + (1 + (z - 2)), z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (183) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: IFSUM after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: IFSUM2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 Computed SIZE bound using CoFloCo for: SUM2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (184) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ z' }-> 1 + s76 :|: s76 >= 0, s76 <= 0, z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + s74 :|: s74 >= 0, s74 <= 0, s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + s72 :|: s72 >= 0, s72 <= 0, z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(1, 1 + (z - 1), z', 0) + s73 :|: s73 >= 0, s73 <= 0, z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(0, z, z', z'') + s75 :|: s75 >= 0, s75 <= 0, z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s65 + z19, 1 + z'') :|: s65 >= 0, s65 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s66 + 0, 1 + z'') :|: s66 >= 0, s66 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s67 + 0, 1 + z'') :|: s67 >= 0, s67 <= 2 + 1, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s68 + 0, 1 + z'') :|: s68 >= 0, s68 <= 2 + 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s69 + z110, 1 + z'') :|: s69 >= 0, s69 <= 2 + 0, z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s70 + 0, 1 + z'') :|: s70 >= 0, s70 <= 2 + 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s53 + z16, 1 + z'') + s' :|: s53 >= 0, s53 <= 2 + z07, s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s54 + z16, 1 + z'') + s'' :|: s54 >= 0, s54 <= 2 + z07, s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s55 + 0, 1 + z'') + s1 :|: s55 >= 0, s55 <= 2 + z07, s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s56 + 0, 1 + z'') + s2 :|: s56 >= 0, s56 <= 2 + z07, s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s57 + 0, 1 + z'') + s3 :|: s57 >= 0, s57 <= 2 + 1, s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s58 + 0, 1 + z'') + s4 :|: s58 >= 0, s58 <= 2 + 1, s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s59 + 0, 1 + z'') + s5 :|: s59 >= 0, s59 <= 2 + 0, s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s60 + 0, 1 + z'') + s6 :|: s60 >= 0, s60 <= 2 + 0, s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + s61 + z17, 1 + z'') + s7 :|: s61 >= 0, s61 <= 2 + 0, s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s62 + z17, 1 + z'') + s8 :|: s62 >= 0, s62 <= 2 + 0, s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + s63 + 0, 1 + z'') + s9 :|: s63 >= 0, s63 <= 2 + 0, s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s64 + 0, 1 + z'') + s10 :|: s64 >= 0, s64 <= 2 + 0, s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + s71 :|: s71 >= 0, s71 <= 2 + (1 + (z - 2)), z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] IFSUM: runtime: ?, size: O(1) [0] IFSUM2: runtime: ?, size: O(1) [2] SUM2: runtime: ?, size: O(1) [1] ---------------------------------------- (185) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: IFSUM after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (186) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ z' }-> 1 + s76 :|: s76 >= 0, s76 <= 0, z' - 1 >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(s50, 1 + (z - 1), z', 1 + (z'' - 1)) + s74 :|: s74 >= 0, s74 <= 0, s50 >= 0, s50 <= 2, z' >= 0, z - 1 >= 0, z'' - 1 >= 0 GEN(z, z', z'') -{ 1 }-> 1 + IF(2, 0, z', z'') + s72 :|: s72 >= 0, s72 <= 0, z' >= 0, z = 0, z'' >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(1, 1 + (z - 1), z', 0) + s73 :|: s73 >= 0, s73 <= 0, z'' = 0, z' >= 0, z - 1 >= 0 GEN(z, z', z'') -{ 1 + z }-> 1 + IF(0, z, z', z'') + s75 :|: s75 >= 0, s75 <= 0, z' >= 0, z >= 0, z'' >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + GEN(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z', z'', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(z15, z'') :|: z = 2, z15 >= 0, z'' >= 0, z06 >= 0, z' = 1 + z06 + z15 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(0, z'') :|: z = 2, z'' >= 0, z' >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s65 + z19, 1 + z'') :|: s65 >= 0, s65 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s66 + 0, 1 + z'') :|: s66 >= 0, s66 <= 2 + z010, z'' >= 0, z19 >= 0, z = 1, z' = 1 + z010 + z19, z010 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s67 + 0, 1 + z'') :|: s67 >= 0, s67 <= 2 + 1, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s68 + 0, 1 + z'') :|: s68 >= 0, s68 <= 2 + 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s69 + z110, 1 + z'') :|: s69 >= 0, s69 <= 2 + 0, z011 >= 0, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z011 + z110 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s70 + 0, 1 + z'') :|: s70 >= 0, s70 <= 2 + 0, z'' >= 0, z = 1, z' >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s53 + z16, 1 + z'') + s' :|: s53 >= 0, s53 <= 2 + z07, s' >= 0, s' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s54 + z16, 1 + z'') + s'' :|: s54 >= 0, s54 <= 2 + z07, s'' >= 0, s'' <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 + z07 }-> 1 + SUM2(1 + s55 + 0, 1 + z'') + s1 :|: s55 >= 0, s55 <= 2 + z07, s1 >= 0, s1 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s56 + 0, 1 + z'') + s2 :|: s56 >= 0, s56 <= 2 + z07, s2 >= 0, s2 <= 0, z'' >= 0, z' = 1 + z07 + z16, z07 >= 0, z = 1, z16 >= 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s57 + 0, 1 + z'') + s3 :|: s57 >= 0, s57 <= 2 + 1, s3 >= 0, s3 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s58 + 0, 1 + z'') + s4 :|: s58 >= 0, s58 <= 2 + 1, s4 >= 0, s4 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 2 }-> 1 + SUM2(1 + s59 + 0, 1 + z'') + s5 :|: s59 >= 0, s59 <= 2 + 0, s5 >= 0, s5 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s60 + 0, 1 + z'') + s6 :|: s60 >= 0, s60 <= 2 + 0, s6 >= 0, s6 <= 0, z'' >= 0, z = 1, z' = 0 IFSUM2(z, z', z'') -{ 1 + z08 }-> 1 + SUM2(1 + s61 + z17, 1 + z'') + s7 :|: s61 >= 0, s61 <= 2 + 0, s7 >= 0, s7 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s62 + z17, 1 + z'') + s8 :|: s62 >= 0, s62 <= 2 + 0, s8 >= 0, s8 <= 0, z08 >= 0, z'' >= 0, z = 1, z17 >= 0, z' = 1 + z08 + z17 IFSUM2(z, z', z'') -{ 1 + z09 }-> 1 + SUM2(1 + s63 + 0, 1 + z'') + s9 :|: s63 >= 0, s63 <= 2 + 0, s9 >= 0, s9 <= 0, z18 >= 0, z'' >= 0, z' = 1 + z09 + z18, z = 1, z09 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + s64 + 0, 1 + z'') + s10 :|: s64 >= 0, s64 <= 2 + 0, s10 >= 0, s10 <= 0, z'' >= 0, z = 1, z' >= 0 ISZERO(z) -{ z }-> 1 + s34 :|: s34 >= 0, s34 <= 0, z - 2 >= 0 P(z) -{ z }-> 1 + s :|: s >= 0, s <= 0, z - 2 >= 0 SUM(z) -{ 0 }-> 0 :|: z >= 0 SUM(z) -{ 0 }-> 1 + SUM2(z, 0) :|: z >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s11, 0, z') :|: s11 >= 0, s11 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s12, 0, z') :|: s12 >= 0, s12 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s13, 1 + z01 + z1'', z') :|: s13 >= 0, s13 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s14, 1 + z01 + z1'', z') :|: s14 >= 0, s14 <= 2, z' >= 0, z01 >= 0, z = 1 + z01 + z1'', z1'' >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s15, 1 + z02 + z11, z') :|: s15 >= 0, s15 <= 2, z11 >= 0, z' >= 0, z = 1 + z02 + z11, z02 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s16, 0, z') :|: s16 >= 0, s16 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s17, z, z') :|: s17 >= 0, s17 <= 2, z' >= 0, z >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s18, 0, z') + s35 :|: s35 >= 0, s35 <= 0, s18 >= 0, s18 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s19, 0, z') + s36 :|: s36 >= 0, s36 <= 0, s19 >= 0, s19 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(2, s20, 0, z') + s37 :|: s37 >= 0, s37 <= 0, s20 >= 0, s20 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(2, s21, 0, z') + s38 :|: s38 >= 0, s38 <= 0, s21 >= 0, s21 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s22, 1 + z03 + z12, z') + s39 :|: s39 >= 0, s39 <= 0, s22 >= 0, s22 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s23, 1 + z03 + z12, z') + s40 :|: s40 >= 0, s40 <= 0, s23 >= 0, s23 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z03 }-> 1 + IFSUM(1, s24, 1 + z03 + z12, z') + s41 :|: s41 >= 0, s41 <= 0, s24 >= 0, s24 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(1, s25, 1 + z03 + z12, z') + s42 :|: s42 >= 0, s42 <= 0, s25 >= 0, s25 <= 2, z = 1 + z03 + z12, z' >= 0, z12 >= 0, z03 >= 0 SUM2(z, z') -{ 1 + z04 }-> 1 + IFSUM(0, s26, 1 + z04 + z13, z') + s43 :|: s43 >= 0, s43 <= 0, s26 >= 0, s26 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s27, 1 + z04 + z13, z') + s44 :|: s44 >= 0, s44 <= 0, s27 >= 0, s27 <= 2, z = 1 + z04 + z13, z04 >= 0, z' >= 0, z13 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s28, 0, z') + s45 :|: s45 >= 0, s45 <= 0, s28 >= 0, s28 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s29, 0, z') + s46 :|: s46 >= 0, s46 <= 0, s29 >= 0, s29 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 + z05 }-> 1 + IFSUM(0, s30, 1 + z05 + z14, z') + s47 :|: s47 >= 0, s47 <= 0, s30 >= 0, s30 <= 2, z = 1 + z05 + z14, z' >= 0, z05 >= 0, z14 >= 0 SUM2(z, z') -{ 2 }-> 1 + IFSUM(0, s31, 0, z') + s48 :|: s48 >= 0, s48 <= 0, s31 >= 0, s31 <= 2, z' >= 0, z = 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(0, s32, z, z') + s49 :|: s49 >= 0, s49 <= 0, s32 >= 0, s32 <= 2, z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(gen(z, z', 0)) :|: z' >= 0, z >= 0 TIMES(z, z') -{ 0 }-> 1 + SUM(0) :|: z' >= 0, z >= 0 ge(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 2, z' - 1 >= 0, z - 1 >= 0 ge(z, z') -{ 0 }-> 2 :|: z >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 ge(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 gen(z, z', z'') -{ 0 }-> if(s52, 1 + (z - 1), z', 1 + (z'' - 1)) :|: s52 >= 0, s52 <= 2, z' >= 0, z'' - 1 >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(2, 0, z', z'') :|: z' >= 0, z = 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> if(1, 1 + (z - 1), z', 0) :|: z'' = 0, z' >= 0, z - 1 >= 0 gen(z, z', z'') -{ 0 }-> if(0, z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 generate(z, z') -{ 0 }-> gen(z, z', 0) :|: z' >= 0, z >= 0 generate(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 1 + z'' + gen(z', z'', 1 + z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: z >= 0 isZero(z) -{ 0 }-> s33 :|: s33 >= 0, s33 <= 2, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> 1 + s71 :|: s71 >= 0, s71 <= 2 + (1 + (z - 2)), z - 2 >= 0 p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {IFSUM,IFSUM2,SUM2}, {if,gen}, {GEN,IF}, {SUM}, {generate}, {TIMES} Previous analysis results are: P: runtime: O(n^1) [z], size: O(1) [0] isZero: runtime: O(1) [0], size: O(1) [2] tail: runtime: O(1) [0], size: O(n^1) [z] ISZERO: runtime: O(n^1) [z], size: O(1) [0] ge: runtime: O(1) [0], size: O(1) [2] head: runtime: O(1) [0], size: O(n^1) [1 + z] isNil: runtime: O(1) [0], size: O(1) [2] p: runtime: O(1) [0], size: O(n^1) [2 + z] GE: runtime: O(n^1) [z'], size: O(1) [0] IFSUM: runtime: INF, size: O(1) [0] IFSUM2: runtime: ?, size: O(1) [2] SUM2: runtime: ?, size: O(1) [1] ---------------------------------------- (187) 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: SUM(v0) -> null_SUM [0] TIMES(v0, v1) -> null_TIMES [0] ge(v0, v1) -> null_ge [0] isNil(v0) -> null_isNil [0] isZero(v0) -> null_isZero [0] head(v0) -> null_head [0] tail(v0) -> null_tail [0] p(v0) -> null_p [0] generate(v0, v1) -> null_generate [0] gen(v0, v1, v2) -> null_gen [0] if(v0, v1, v2, v3) -> null_if [0] IF(v0, v1, v2, v3) -> null_IF [0] IFSUM(v0, v1, v2, v3) -> null_IFSUM [0] ISZERO(v0) -> null_ISZERO [0] P(v0) -> null_P [0] GE(v0, v1) -> null_GE [0] IFSUM2(v0, v1, v2) -> null_IFSUM2 [0] And the following fresh constants: null_SUM, null_TIMES, null_ge, null_isNil, null_isZero, null_head, null_tail, null_p, null_generate, null_gen, null_if, null_IF, null_IFSUM, null_ISZERO, null_P, null_GE, null_IFSUM2, const, const1, const2 ---------------------------------------- (188) 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: GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) [1] IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) [1] IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) [1] ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) [1] P(s(s(z0))) -> c25(P(s(z0))) [1] GE(s(z0), s(z1)) -> c28(GE(z0, z1)) [1] SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) [1] SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) [1] IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) [1] IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) [1] IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) [1] SUM(z0) -> c6(SUM2(z0, 0)) [0] TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) [0] ge(z0, 0) -> true [0] ge(0, s(z0)) -> false [0] ge(s(z0), s(z1)) -> ge(z0, z1) [0] isNil(nil) -> true [0] isNil(cons(z0, z1)) -> false [0] isZero(0) -> true [0] isZero(s(0)) -> false [0] isZero(s(s(z0))) -> isZero(s(z0)) [0] head(cons(z0, z1)) -> z0 [0] head(nil) -> error [0] tail(nil) -> nil [0] tail(cons(z0, z1)) -> z1 [0] p(0) -> s(s(0)) [0] p(s(0)) -> 0 [0] p(s(s(z0))) -> s(p(s(z0))) [0] generate(z0, z1) -> gen(z0, z1, 0) [0] gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) [0] if(true, z0, z1, z2) -> nil [0] if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) [0] SUM(v0) -> null_SUM [0] TIMES(v0, v1) -> null_TIMES [0] ge(v0, v1) -> null_ge [0] isNil(v0) -> null_isNil [0] isZero(v0) -> null_isZero [0] head(v0) -> null_head [0] tail(v0) -> null_tail [0] p(v0) -> null_p [0] generate(v0, v1) -> null_generate [0] gen(v0, v1, v2) -> null_gen [0] if(v0, v1, v2, v3) -> null_if [0] IF(v0, v1, v2, v3) -> null_IF [0] IFSUM(v0, v1, v2, v3) -> null_IFSUM [0] ISZERO(v0) -> null_ISZERO [0] P(v0) -> null_P [0] GE(v0, v1) -> null_GE [0] IFSUM2(v0, v1, v2) -> null_IFSUM2 [0] The TRS has the following type information: GEN :: s:0:error:null_head:null_p -> a -> s:0:error:null_head:null_p -> c3 c3 :: c5:null_IF -> c28:null_GE -> c3 IF :: false:true:null_ge:null_isNil:null_isZero -> s:0:error:null_head:null_p -> a -> s:0:error:null_head:null_p -> c5:null_IF ge :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> false:true:null_ge:null_isNil:null_isZero GE :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> c28:null_GE false :: false:true:null_ge:null_isNil:null_isZero c5 :: c3 -> c5:null_IF s :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p IFSUM :: false:true:null_ge:null_isNil:null_isZero -> false:true:null_ge:null_isNil:null_isZero -> cons:nil:null_tail:null_generate:null_gen:null_if -> s:0:error:null_head:null_p -> c10:null_IFSUM c10 :: c11:c12:c13:null_IFSUM2 -> c10:null_IFSUM IFSUM2 :: false:true:null_ge:null_isNil:null_isZero -> cons:nil:null_tail:null_generate:null_gen:null_if -> s:0:error:null_head:null_p -> c11:c12:c13:null_IFSUM2 ISZERO :: s:0:error:null_head:null_p -> c22:null_ISZERO c22 :: c22:null_ISZERO -> c22:null_ISZERO P :: s:0:error:null_head:null_p -> c25:null_P c25 :: c25:null_P -> c25:null_P c28 :: c28:null_GE -> c28:null_GE SUM2 :: cons:nil:null_tail:null_generate:null_gen:null_if -> s:0:error:null_head:null_p -> c7:c8 c7 :: c10:null_IFSUM -> c7:c8 isNil :: cons:nil:null_tail:null_generate:null_gen:null_if -> false:true:null_ge:null_isNil:null_isZero isZero :: s:0:error:null_head:null_p -> false:true:null_ge:null_isNil:null_isZero head :: cons:nil:null_tail:null_generate:null_gen:null_if -> s:0:error:null_head:null_p c8 :: c10:null_IFSUM -> c22:null_ISZERO -> c7:c8 true :: false:true:null_ge:null_isNil:null_isZero c11 :: c7:c8 -> c11:c12:c13:null_IFSUM2 tail :: cons:nil:null_tail:null_generate:null_gen:null_if -> cons:nil:null_tail:null_generate:null_gen:null_if c12 :: c7:c8 -> c25:null_P -> c11:c12:c13:null_IFSUM2 cons :: s:0:error:null_head:null_p -> cons:nil:null_tail:null_generate:null_gen:null_if -> cons:nil:null_tail:null_generate:null_gen:null_if p :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p c13 :: c7:c8 -> c11:c12:c13:null_IFSUM2 SUM :: cons:nil:null_tail:null_generate:null_gen:null_if -> c6:null_SUM c6 :: c7:c8 -> c6:null_SUM 0 :: s:0:error:null_head:null_p TIMES :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> c4:null_TIMES c4 :: c6:null_SUM -> c4:null_TIMES generate :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil:null_tail:null_generate:null_gen:null_if nil :: cons:nil:null_tail:null_generate:null_gen:null_if error :: s:0:error:null_head:null_p gen :: s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil:null_tail:null_generate:null_gen:null_if if :: false:true:null_ge:null_isNil:null_isZero -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> s:0:error:null_head:null_p -> cons:nil:null_tail:null_generate:null_gen:null_if null_SUM :: c6:null_SUM null_TIMES :: c4:null_TIMES null_ge :: false:true:null_ge:null_isNil:null_isZero null_isNil :: false:true:null_ge:null_isNil:null_isZero null_isZero :: false:true:null_ge:null_isNil:null_isZero null_head :: s:0:error:null_head:null_p null_tail :: cons:nil:null_tail:null_generate:null_gen:null_if null_p :: s:0:error:null_head:null_p null_generate :: cons:nil:null_tail:null_generate:null_gen:null_if null_gen :: cons:nil:null_tail:null_generate:null_gen:null_if null_if :: cons:nil:null_tail:null_generate:null_gen:null_if null_IF :: c5:null_IF null_IFSUM :: c10:null_IFSUM null_ISZERO :: c22:null_ISZERO null_P :: c25:null_P null_GE :: c28:null_GE null_IFSUM2 :: c11:c12:c13:null_IFSUM2 const :: c3 const1 :: a const2 :: c7:c8 Rewrite Strategy: INNERMOST ---------------------------------------- (189) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: false => 1 true => 2 0 => 0 nil => 0 error => 1 null_SUM => 0 null_TIMES => 0 null_ge => 0 null_isNil => 0 null_isZero => 0 null_head => 0 null_tail => 0 null_p => 0 null_generate => 0 null_gen => 0 null_if => 0 null_IF => 0 null_IFSUM => 0 null_ISZERO => 0 null_P => 0 null_GE => 0 null_IFSUM2 => 0 const => 0 const1 => 0 const2 => 0 ---------------------------------------- (190) Obligation: Complexity RNTS consisting of the following rules: GE(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 GE(z, z') -{ 1 }-> 1 + GE(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 GEN(z, z', z'') -{ 1 }-> 1 + IF(ge(z2, z0), z0, z1, z2) + GE(z2, z0) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, 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 + GEN(z0, z1, 1 + z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IFSUM(z, z', z'', z3) -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z3 = v3, v2 >= 0, v3 >= 0 IFSUM(z, z', z'', z3) -{ 1 }-> 1 + IFSUM2(z0, z1, z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IFSUM2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(tail(z0), z1) :|: z = 2, z1 >= 0, z0 >= 0, z' = z0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(head(z0)) + tail(z0), 1 + z1) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 IFSUM2(z, z', z'') -{ 1 }-> 1 + SUM2(1 + p(head(z0)) + tail(z0), 1 + z1) + P(head(z0)) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 ISZERO(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ISZERO(z) -{ 1 }-> 1 + ISZERO(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) P(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 P(z) -{ 1 }-> 1 + P(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) SUM(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 SUM(z) -{ 0 }-> 1 + SUM2(z0, 0) :|: z = z0, z0 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(isNil(z0), isZero(head(z0)), z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 SUM2(z, z') -{ 1 }-> 1 + IFSUM(isNil(z0), isZero(head(z0)), z0, z1) + ISZERO(head(z0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 TIMES(z, z') -{ 0 }-> 1 + SUM(generate(z0, z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ge(z, z') -{ 0 }-> ge(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 ge(z, z') -{ 0 }-> 2 :|: z = z0, z0 >= 0, z' = 0 ge(z, z') -{ 0 }-> 1 :|: z0 >= 0, z' = 1 + z0, z = 0 ge(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 gen(z, z', z'') -{ 0 }-> if(ge(z2, z0), z0, z1, z2) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 gen(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 generate(z, z') -{ 0 }-> gen(z0, z1, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 generate(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 1 :|: z = 0 head(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z = 2, z1 >= 0, 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 if(z, z', z'', z3) -{ 0 }-> 1 + z1 + gen(z0, z1, 1 + z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 isNil(z) -{ 0 }-> 2 :|: z = 0 isNil(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 isNil(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 isZero(z) -{ 0 }-> isZero(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + 0 isZero(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 p(z) -{ 0 }-> 0 :|: z = 1 + 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 p(z) -{ 0 }-> 1 + p(1 + z0) :|: z0 >= 0, z = 1 + (1 + z0) p(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (191) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace GEN(z0, z1, z2) -> c3(IF(ge(z2, z0), z0, z1, z2), GE(z2, z0)) by GEN(0, x1, z0) -> c3(IF(true, 0, x1, z0), GE(z0, 0)) GEN(s(z0), x1, 0) -> c3(IF(false, s(z0), x1, 0), GE(0, s(z0))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) ---------------------------------------- (192) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(0, x1, z0) -> c3(IF(true, 0, x1, z0), GE(z0, 0)) GEN(s(z0), x1, 0) -> c3(IF(false, s(z0), x1, 0), GE(0, s(z0))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(0, x1, z0) -> c3(IF(true, 0, x1, z0), GE(z0, 0)) GEN(s(z0), x1, 0) -> c3(IF(false, s(z0), x1, 0), GE(0, s(z0))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c7_1, c8_2, c11_1, c12_2, c13_1, c4_1, c3_2 ---------------------------------------- (193) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: GEN(s(z0), x1, 0) -> c3(IF(false, s(z0), x1, 0), GE(0, s(z0))) Removed 1 trailing nodes: GEN(0, x1, z0) -> c3(IF(true, 0, x1, z0), GE(z0, 0)) ---------------------------------------- (194) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c7_1, c8_2, c11_1, c12_2, c13_1, c4_1, c3_2 ---------------------------------------- (195) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(z0, z1) -> c7(IFSUM(isNil(z0), isZero(head(z0)), z0, z1)) by SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c7(IFSUM(true, isZero(head(nil)), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) ---------------------------------------- (196) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c7(IFSUM(true, isZero(head(nil)), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c7(IFSUM(true, isZero(head(nil)), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c8_2, c11_1, c12_2, c13_1, c4_1, c3_2, c7_1 ---------------------------------------- (197) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: SUM2(nil, x1) -> c7(IFSUM(true, isZero(head(nil)), nil, x1)) ---------------------------------------- (198) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, SUM2_2, IFSUM2_3, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c8_2, c11_1, c12_2, c13_1, c4_1, c3_2, c7_1 ---------------------------------------- (199) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(z0, z1) -> c8(IFSUM(isNil(z0), isZero(head(z0)), z0, z1), ISZERO(head(z0))) by SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(true, isZero(head(nil)), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) ---------------------------------------- (200) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(true, isZero(head(nil)), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(true, isZero(head(nil)), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c11_1, c12_2, c13_1, c4_1, c3_2, c7_1, c8_2 ---------------------------------------- (201) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (202) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c11_1, c12_2, c13_1, c4_1, c3_2, c7_1, c8_2, c8_1 ---------------------------------------- (203) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. SUM2(nil, x1) -> c8(ISZERO(head(nil))) We considered the (Usable) Rules: tail(cons(z0, z1)) -> z1 generate(z0, z1) -> gen(z0, z1, 0) isNil(cons(z0, z1)) -> false gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) if(true, z0, z1, z2) -> nil tail(nil) -> nil isNil(nil) -> true And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = x_1 + x_3 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_4 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_1 + x_3 + x_4 POL(IFSUM2(x_1, x_2, x_3)) = x_2 + x_3 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = x_1 POL(SUM2(x_1, x_2)) = x_1 + x_2 POL(TIMES(x_1, x_2)) = [1] + x_1 + x_2 POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(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(error) = [1] POL(false) = 0 POL(ge(x_1, x_2)) = [1] + x_2 POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 POL(generate(x_1, x_2)) = [1] + x_1 + x_2 POL(head(x_1)) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 POL(isNil(x_1)) = 0 POL(isZero(x_1)) = [1] POL(nil) = [1] POL(p(x_1)) = [1] + x_1 POL(s(x_1)) = 0 POL(tail(x_1)) = x_1 POL(true) = 0 ---------------------------------------- (204) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c11_1, c12_2, c13_1, c4_1, c3_2, c7_1, c8_2, c8_1 ---------------------------------------- (205) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) We considered the (Usable) Rules: isNil(cons(z0, z1)) -> false isNil(nil) -> true And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = x_1 + x_3 POL(IF(x_1, x_2, x_3, x_4)) = x_2 + x_4 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_1 + x_4 POL(IFSUM2(x_1, x_2, x_3)) = [1] + x_3 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = [1] POL(SUM2(x_1, x_2)) = [1] + x_2 POL(TIMES(x_1, x_2)) = [1] POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(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(error) = [1] POL(false) = [1] POL(ge(x_1, x_2)) = [1] + x_1 + x_2 POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(generate(x_1, x_2)) = [1] + x_1 + x_2 POL(head(x_1)) = 0 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(isNil(x_1)) = x_1 POL(isZero(x_1)) = [1] POL(nil) = 0 POL(p(x_1)) = [1] + x_1 POL(s(x_1)) = 0 POL(tail(x_1)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (206) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c11_1, c12_2, c13_1, c4_1, c3_2, c7_1, c8_2, c8_1 ---------------------------------------- (207) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(true, z0, z1) -> c11(SUM2(tail(z0), z1)) by IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) ---------------------------------------- (208) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c12_2, c13_1, c4_1, c3_2, c7_1, c8_2, c8_1, c11_1 ---------------------------------------- (209) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(false, z0, z1) -> c12(SUM2(cons(p(head(z0)), tail(z0)), s(z1)), P(head(z0))) by IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1)), P(error)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) ---------------------------------------- (210) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1)), P(error)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1)), P(error)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c4_1, c3_2, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1 ---------------------------------------- (211) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (212) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c4_1, c3_2, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1 ---------------------------------------- (213) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) by TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) ---------------------------------------- (214) Obligation: Complexity Dependency Tuples Problem Rules: ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(nil) -> true isNil(cons(z0, z1)) -> false isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) generate(z0, z1) -> gen(z0, z1, 0) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: ge_2, isNil_1, isZero_1, head_1, tail_1, p_1, generate_2, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c3_2, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1 ---------------------------------------- (215) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: generate(z0, z1) -> gen(z0, z1, 0) ---------------------------------------- (216) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c3_2, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1 ---------------------------------------- (217) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace GEN(s(z1), x1, s(z0)) -> c3(IF(ge(z0, z1), s(z1), x1, s(z0)), GE(s(z0), s(z1))) by GEN(s(0), x1, s(z0)) -> c3(IF(true, s(0), x1, s(z0)), GE(s(z0), s(0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) ---------------------------------------- (218) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(0), x1, s(z0)) -> c3(IF(true, s(0), x1, s(z0)), GE(s(z0), s(0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(0), x1, s(z0)) -> c3(IF(true, s(0), x1, s(z0)), GE(s(z0), s(0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1 ---------------------------------------- (219) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (220) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1 ---------------------------------------- (221) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) We considered the (Usable) Rules: isNil(cons(z0, z1)) -> false isNil(nil) -> true And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = x_1 POL(IF(x_1, x_2, x_3, x_4)) = x_2 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_1 + x_4 POL(IFSUM2(x_1, x_2, x_3)) = x_3 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = [1] POL(SUM2(x_1, x_2)) = x_2 POL(TIMES(x_1, x_2)) = [1] POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(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)) = 0 POL(error) = 0 POL(false) = 0 POL(ge(x_1, x_2)) = [1] POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(head(x_1)) = x_1 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(isNil(x_1)) = 0 POL(isZero(x_1)) = [1] + x_1 POL(nil) = 0 POL(p(x_1)) = [1] POL(s(x_1)) = x_1 POL(tail(x_1)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (222) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1 ---------------------------------------- (223) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) We considered the (Usable) Rules: isNil(cons(z0, z1)) -> false isNil(nil) -> true And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = x_1 POL(IF(x_1, x_2, x_3, x_4)) = x_2 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_1 POL(IFSUM2(x_1, x_2, x_3)) = 0 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = [1] POL(SUM2(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = [1] POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(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)) = 0 POL(error) = 0 POL(false) = 0 POL(ge(x_1, x_2)) = [1] POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(head(x_1)) = x_1 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(isNil(x_1)) = 0 POL(isZero(x_1)) = [1] + x_1 POL(nil) = 0 POL(p(x_1)) = [1] POL(s(x_1)) = [1] POL(tail(x_1)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (224) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1 ---------------------------------------- (225) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(z0, z1), x1) -> c7(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1)) by SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) ---------------------------------------- (226) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1 ---------------------------------------- (227) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) by SUM2(nil, x0) -> c7(IFSUM(true, isZero(error), nil, x0)) ---------------------------------------- (228) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(nil, x0) -> c7(IFSUM(true, isZero(error), nil, x0)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) K tuples: TIMES(z0, z1) -> c4(SUM(generate(z0, z1))) SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c7(IFSUM(isNil(nil), isZero(error), nil, x1)) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1 ---------------------------------------- (229) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: SUM2(nil, x0) -> c7(IFSUM(true, isZero(error), nil, x0)) ---------------------------------------- (230) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c7_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1 ---------------------------------------- (231) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(z0, z1), x1) -> c7(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1)) by SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) ---------------------------------------- (232) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1 ---------------------------------------- (233) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(z0, z1), x1) -> c8(IFSUM(isNil(cons(z0, z1)), isZero(z0), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) by SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) ---------------------------------------- (234) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1 ---------------------------------------- (235) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) by SUM2(nil, x0) -> c8(IFSUM(true, isZero(error), nil, x0), ISZERO(head(nil))) ---------------------------------------- (236) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) SUM2(nil, x0) -> c8(IFSUM(true, isZero(error), nil, x0), ISZERO(head(nil))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1 ---------------------------------------- (237) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (238) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false isNil(nil) -> true isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, ge_2, isNil_1, isZero_1, gen_3, if_4 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1 ---------------------------------------- (239) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: isNil(nil) -> true ---------------------------------------- (240) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1 ---------------------------------------- (241) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) We considered the (Usable) Rules: isNil(cons(z0, z1)) -> false And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = x_1 + x_3 POL(IF(x_1, x_2, x_3, x_4)) = x_2 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_1 + x_3 + x_4 POL(IFSUM2(x_1, x_2, x_3)) = x_2 + x_3 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = 0 POL(SUM2(x_1, x_2)) = x_2 POL(TIMES(x_1, x_2)) = 0 POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(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)) = 0 POL(error) = [1] POL(false) = 0 POL(ge(x_1, x_2)) = x_1 + x_2 POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(head(x_1)) = [1] POL(if(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_2 + x_3 + x_4 POL(isNil(x_1)) = 0 POL(isZero(x_1)) = [1] POL(nil) = [1] POL(p(x_1)) = [1] POL(s(x_1)) = 0 POL(tail(x_1)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (242) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c8_2, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1 ---------------------------------------- (243) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(z0, z1), x1) -> c8(IFSUM(false, isZero(head(cons(z0, z1))), cons(z0, z1), x1), ISZERO(head(cons(z0, z1)))) by SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) ---------------------------------------- (244) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) SUM2(nil, x1) -> c8(ISZERO(head(nil))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, SUM2_2, TIMES_2, GEN_3 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c8_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1, c8_2 ---------------------------------------- (245) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(nil, x1) -> c8(ISZERO(head(nil))) by SUM2(nil, x0) -> c8(ISZERO(error)) ---------------------------------------- (246) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) SUM2(nil, x0) -> c8(ISZERO(error)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) SUM2(nil, x1) -> c8(ISZERO(head(nil))) SUM2(nil, x1) -> c8(IFSUM(isNil(nil), isZero(error), nil, x1), ISZERO(head(nil))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1, c8_2, c8_1 ---------------------------------------- (247) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) SUM2(nil, x0) -> c8(ISZERO(error)) ---------------------------------------- (248) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_2, c12_1, c4_1, c3_2, c3_1, c7_1, c8_2 ---------------------------------------- (249) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(false, cons(z0, z1), x1) -> c12(SUM2(cons(p(head(cons(z0, z1))), tail(cons(z0, z1))), s(x1)), P(z0)) by IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) ---------------------------------------- (250) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c4_1, c3_2, c3_1, c7_1, c8_2, c12_2 ---------------------------------------- (251) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) by IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) ---------------------------------------- (252) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, TIMES_2, GEN_3, SUM2_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c4_1, c3_2, c3_1, c7_1, c8_2, c12_2 ---------------------------------------- (253) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TIMES(z0, z1) -> c4(SUM(gen(z0, z1, 0))) by TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) ---------------------------------------- (254) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (255) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace GEN(s(s(z1)), x1, s(s(z0))) -> c3(IF(ge(z0, z1), s(s(z1)), x1, s(s(z0))), GE(s(s(z0)), s(s(z1)))) by GEN(s(s(0)), x1, s(s(z0))) -> c3(IF(true, s(s(0)), x1, s(s(z0))), GE(s(s(z0)), s(s(0)))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) ---------------------------------------- (256) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(0)), x1, s(s(z0))) -> c3(IF(true, s(s(0)), x1, s(s(z0))), GE(s(s(z0)), s(s(0)))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(0)), x1, s(s(z0))) -> c3(IF(true, s(s(0)), x1, s(s(z0))), GE(s(s(z0)), s(s(0)))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (257) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (258) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (259) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) We considered the (Usable) Rules: isNil(cons(z0, z1)) -> false And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = x_1 POL(IF(x_1, x_2, x_3, x_4)) = x_2 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_1 POL(IFSUM2(x_1, x_2, x_3)) = 0 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = 0 POL(SUM2(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = 0 POL(error) = [1] POL(false) = 0 POL(ge(x_1, x_2)) = x_2 POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(head(x_1)) = [1] + x_1 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(isNil(x_1)) = 0 POL(isZero(x_1)) = [1] POL(nil) = 0 POL(p(x_1)) = [1] POL(s(x_1)) = x_1 POL(tail(x_1)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (260) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (261) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) We considered the (Usable) Rules: isNil(cons(z0, z1)) -> false And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = x_1 POL(IF(x_1, x_2, x_3, x_4)) = x_2 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_1 POL(IFSUM2(x_1, x_2, x_3)) = 0 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = 0 POL(SUM2(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c8(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = 0 POL(error) = [1] POL(false) = 0 POL(ge(x_1, x_2)) = x_1 + x_2 POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(head(x_1)) = [1] + x_1 POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(isNil(x_1)) = 0 POL(isZero(x_1)) = [1] POL(nil) = 0 POL(p(x_1)) = [1] POL(s(x_1)) = [1] + x_1 POL(tail(x_1)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (262) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (263) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(0, x1), x2) -> c7(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2)) by SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) ---------------------------------------- (264) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (265) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(0), x1), x2) -> c7(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2)) by SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) ---------------------------------------- (266) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (267) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(s(z0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2)) by SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) ---------------------------------------- (268) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (269) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(0, x1), x2) -> c8(IFSUM(isNil(cons(0, x1)), true, cons(0, x1), x2), ISZERO(head(cons(0, x1)))) by SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) ---------------------------------------- (270) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (271) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(0), x1), x2) -> c8(IFSUM(isNil(cons(s(0), x1)), false, cons(s(0), x1), x2), ISZERO(head(cons(s(0), x1)))) by SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) ---------------------------------------- (272) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (273) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(s(z0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(z0)), x1)), isZero(s(z0)), cons(s(s(z0)), x1), x2), ISZERO(head(cons(s(s(z0)), x1)))) by SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) ---------------------------------------- (274) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1 ---------------------------------------- (275) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) by SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) ---------------------------------------- (276) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c8_2, c12_2, c4_1, c8_1 ---------------------------------------- (277) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(head(cons(z0, z1)))) by SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) ---------------------------------------- (278) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c12_2, c4_1, c8_2, c8_1 ---------------------------------------- (279) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(head(cons(z0, z1))), z1), s(x2)), P(z0)) by IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) ---------------------------------------- (280) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c12_2, c4_1, c8_2, c8_1 ---------------------------------------- (281) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), tail(cons(z0, z1))), s(x2)), P(z0)) by IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2)), P(0)) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2)), P(s(0))) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) ---------------------------------------- (282) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2)), P(0)) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2)), P(s(0))) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2)), P(0)) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2)), P(s(0))) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (283) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (284) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (285) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(head(nil)), nil), s(x0))) by IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) ---------------------------------------- (286) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (287) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), tail(nil)), s(x0))) by IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) ---------------------------------------- (288) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (289) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace GEN(s(s(s(z1))), x1, s(s(s(z0)))) -> c3(IF(ge(z0, z1), s(s(s(z1))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(z1))))) by GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(IF(true, s(s(s(0))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(0))))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) ---------------------------------------- (290) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(IF(true, s(s(s(0))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(0))))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(IF(true, s(s(s(0))), x1, s(s(s(z0)))), GE(s(s(s(z0))), s(s(s(0))))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (291) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (292) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (293) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) We considered the (Usable) Rules: ge(s(z0), s(z1)) -> ge(z0, z1) ge(0, s(z0)) -> false ge(z0, 0) -> true And the Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(GE(x_1, x_2)) = 0 POL(GEN(x_1, x_2, x_3)) = [1] + x_1 + x_3 POL(IF(x_1, x_2, x_3, x_4)) = x_1 + x_2 POL(IFSUM(x_1, x_2, x_3, x_4)) = x_4 POL(IFSUM2(x_1, x_2, x_3)) = x_3 POL(ISZERO(x_1)) = 0 POL(P(x_1)) = 0 POL(SUM(x_1)) = 0 POL(SUM2(x_1, x_2)) = x_2 POL(TIMES(x_1, x_2)) = 0 POL(c10(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c22(x_1)) = x_1 POL(c25(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(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)) = 0 POL(error) = [1] POL(false) = [1] POL(ge(x_1, x_2)) = [1] POL(gen(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(head(x_1)) = [1] POL(if(x_1, x_2, x_3, x_4)) = [1] + x_2 + x_3 + x_4 POL(isNil(x_1)) = [1] + x_1 POL(isZero(x_1)) = [1] POL(nil) = 0 POL(p(x_1)) = [1] POL(s(x_1)) = 0 POL(tail(x_1)) = [1] POL(true) = 0 ---------------------------------------- (294) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (295) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(s(0)), x1), x2) -> c7(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2)) by SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) ---------------------------------------- (296) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (297) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(s(s(z0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2)) by SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) ---------------------------------------- (298) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (299) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(head(cons(0, z1)))) by SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(0)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) ---------------------------------------- (300) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(0)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, z1), x1) -> c8(IFSUM(false, true, cons(0, z1), x1), ISZERO(0)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (301) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (302) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (303) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(head(cons(s(0), z1)))) by SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(s(0))) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) ---------------------------------------- (304) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(s(0))) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), z1), x1) -> c8(IFSUM(false, false, cons(s(0), z1), x1), ISZERO(s(0))) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (305) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (306) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (307) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(s(0)), x1), x2) -> c8(IFSUM(isNil(cons(s(s(0)), x1)), false, cons(s(s(0)), x1), x2), ISZERO(head(cons(s(s(0)), x1)))) by SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) ---------------------------------------- (308) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (309) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(s(s(z0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(z0))), x1)), isZero(s(z0)), cons(s(s(s(z0))), x1), x2), ISZERO(head(cons(s(s(s(z0))), x1)))) by SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) ---------------------------------------- (310) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (311) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(head(cons(s(s(x0)), z1)))) by SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) ---------------------------------------- (312) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (313) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFSUM2(false, cons(s(s(z0)), x1), x2) -> c12(SUM2(cons(s(p(s(z0))), tail(cons(s(s(z0)), x1))), s(x2)), P(s(s(z0)))) by IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) ---------------------------------------- (314) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (315) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFSUM2(false, cons(0, x1), x2) -> c12(SUM2(cons(s(s(0)), tail(cons(0, x1))), s(x2))) by IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) ---------------------------------------- (316) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (317) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) by IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) ---------------------------------------- (318) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (319) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace SUM2(cons(s(s(s(0))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2)) by SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) ---------------------------------------- (320) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (321) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c7(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2)) by SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) ---------------------------------------- (322) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (323) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace SUM2(cons(s(s(0)), z1), x1) -> c8(IFSUM(false, false, cons(s(s(0)), z1), x1), ISZERO(head(cons(s(s(0)), z1)))) by SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) ---------------------------------------- (324) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (325) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace SUM2(cons(s(s(s(0))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(0))), x1)), false, cons(s(s(s(0))), x1), x2), ISZERO(head(cons(s(s(s(0))), x1)))) by SUM2(cons(s(s(s(0))), z0), z1) -> c8(IFSUM(isNil(cons(s(s(s(0))), z0)), false, cons(s(s(s(0))), z0), z1), ISZERO(s(s(s(0))))) ---------------------------------------- (326) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) SUM2(cons(s(s(s(0))), z0), z1) -> c8(IFSUM(isNil(cons(s(s(s(0))), z0)), false, cons(s(s(s(0))), z0), z1), ISZERO(s(s(s(0))))) S tuples: IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) SUM2(cons(s(s(s(0))), z0), z1) -> c8(IFSUM(isNil(cons(s(s(s(0))), z0)), false, cons(s(s(s(0))), z0), z1), ISZERO(s(s(s(0))))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: IF_4, SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2 Compound Symbols: c5_1, c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2 ---------------------------------------- (327) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace IF(false, z0, z1, z2) -> c5(GEN(z0, z1, s(z2))) by IF(false, s(s(x0)), x1, s(0)) -> c5(GEN(s(s(x0)), x1, s(s(0)))) IF(false, s(s(s(x0))), x1, s(s(0))) -> c5(GEN(s(s(s(x0))), x1, s(s(s(0))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(0)))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(0)))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(s(x2))))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(s(x2))))))) ---------------------------------------- (328) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) SUM2(cons(s(s(s(0))), z0), z1) -> c8(IFSUM(isNil(cons(s(s(s(0))), z0)), false, cons(s(s(s(0))), z0), z1), ISZERO(s(s(s(0))))) IF(false, s(s(x0)), x1, s(0)) -> c5(GEN(s(s(x0)), x1, s(s(0)))) IF(false, s(s(s(x0))), x1, s(s(0))) -> c5(GEN(s(s(s(x0))), x1, s(s(s(0))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(0)))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(0)))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(s(x2))))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(s(x2))))))) S tuples: IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) SUM2(cons(s(s(s(0))), z0), z1) -> c8(IFSUM(isNil(cons(s(s(s(0))), z0)), false, cons(s(s(s(0))), z0), z1), ISZERO(s(s(s(0))))) IF(false, s(s(x0)), x1, s(0)) -> c5(GEN(s(s(x0)), x1, s(s(0)))) IF(false, s(s(s(x0))), x1, s(s(0))) -> c5(GEN(s(s(s(x0))), x1, s(s(s(0))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(0)))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(0)))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(s(x2))))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(s(x2))))))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) IFSUM2(false, nil, x1) -> c12(SUM2(cons(p(head(nil)), tail(nil)), s(x1))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2, IF_4 Compound Symbols: c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_2, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2, c5_1 ---------------------------------------- (329) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 9 leading nodes: GEN(s(s(z0)), x1, s(0)) -> c3(IF(false, s(s(z0)), x1, s(0)), GE(s(0), s(s(z0)))) IF(false, s(s(x0)), x1, s(0)) -> c5(GEN(s(s(x0)), x1, s(s(0)))) GEN(s(s(s(z0))), x1, s(s(0))) -> c3(IF(false, s(s(s(z0))), x1, s(s(0))), GE(s(s(0)), s(s(s(z0))))) IF(false, s(s(s(x0))), x1, s(s(0))) -> c5(GEN(s(s(s(x0))), x1, s(s(s(0))))) GEN(s(s(s(s(z0)))), x1, s(s(s(0)))) -> c3(IF(false, s(s(s(s(z0)))), x1, s(s(s(0)))), GE(s(s(s(0))), s(s(s(s(z0)))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(0)))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(0)))))) GEN(s(0), x1, s(z0)) -> c3(GE(s(z0), s(0))) GEN(s(s(0)), x1, s(s(z0))) -> c3(GE(s(s(z0)), s(s(0)))) GEN(s(s(s(0))), x1, s(s(s(z0)))) -> c3(GE(s(s(s(z0))), s(s(s(0))))) ---------------------------------------- (330) Obligation: Complexity Dependency Tuples Problem Rules: p(0) -> s(s(0)) p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) head(cons(z0, z1)) -> z0 head(nil) -> error tail(nil) -> nil tail(cons(z0, z1)) -> z1 isZero(0) -> true isZero(s(0)) -> false isZero(s(s(z0))) -> isZero(s(z0)) gen(z0, z1, z2) -> if(ge(z2, z0), z0, z1, z2) if(true, z0, z1, z2) -> nil if(false, z0, z1, z2) -> cons(z1, gen(z0, z1, s(z2))) ge(z0, 0) -> true ge(0, s(z0)) -> false ge(s(z0), s(z1)) -> ge(z0, z1) isNil(cons(z0, z1)) -> false Tuples: SUM(z0) -> c6(SUM2(z0, 0)) IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) IFSUM2(false, nil, x0) -> c12(SUM2(cons(p(error), nil), s(x0))) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) SUM2(cons(s(s(s(0))), z0), z1) -> c8(IFSUM(isNil(cons(s(s(s(0))), z0)), false, cons(s(s(s(0))), z0), z1), ISZERO(s(s(s(0))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(s(x2))))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(s(x2))))))) S tuples: IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) ISZERO(s(s(z0))) -> c22(ISZERO(s(z0))) P(s(s(z0))) -> c25(P(s(z0))) GE(s(z0), s(z1)) -> c28(GE(z0, z1)) IFSUM2(false, z0, z1) -> c13(SUM2(cons(p(head(z0)), tail(z0)), s(z1))) IFSUM2(true, cons(z0, z1), x1) -> c11(SUM2(z1, x1)) IFSUM2(false, x0, x1) -> c12(SUM2(cons(p(head(x0)), tail(x0)), s(x1))) SUM2(cons(z0, z1), x2) -> c7(IFSUM(false, isZero(z0), cons(z0, z1), x2)) SUM2(cons(0, z1), x1) -> c7(IFSUM(false, true, cons(0, z1), x1)) SUM2(cons(s(0), z1), x1) -> c7(IFSUM(false, false, cons(s(0), z1), x1)) SUM2(cons(s(s(x0)), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2)) SUM2(cons(z0, z1), x2) -> c8(IFSUM(false, isZero(z0), cons(z0, z1), x2), ISZERO(z0)) SUM2(cons(x0, x1), x2) -> c8(IFSUM(false, isZero(x0), cons(x0, x1), x2)) IFSUM2(false, cons(z0, z1), x2) -> c12(SUM2(cons(p(z0), z1), s(x2)), P(z0)) GEN(s(s(s(s(z1)))), x1, s(s(s(s(z0))))) -> c3(IF(ge(z0, z1), s(s(s(s(z1)))), x1, s(s(s(s(z0))))), GE(s(s(s(s(z0)))), s(s(s(s(z1)))))) SUM2(cons(s(s(0)), z1), x1) -> c7(IFSUM(false, false, cons(s(s(0)), z1), x1)) SUM2(cons(s(s(s(x0))), z1), x2) -> c7(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2)) SUM2(cons(0, x0), x1) -> c8(IFSUM(false, true, cons(0, x0), x1)) SUM2(cons(s(0), x0), x1) -> c8(IFSUM(false, false, cons(s(0), x0), x1)) SUM2(cons(s(s(s(s(z0)))), x1), x2) -> c8(IFSUM(isNil(cons(s(s(s(s(z0)))), x1)), isZero(s(z0)), cons(s(s(s(s(z0)))), x1), x2), ISZERO(head(cons(s(s(s(s(z0)))), x1)))) SUM2(cons(s(s(s(x0))), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(s(x0))), z1), x2), ISZERO(head(cons(s(s(s(x0))), z1)))) SUM2(cons(s(s(x0)), z1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), z1), x2), ISZERO(s(s(x0)))) SUM2(cons(s(s(x0)), x1), x2) -> c8(IFSUM(false, isZero(s(x0)), cons(s(s(x0)), x1), x2)) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) IFSUM2(false, cons(0, z0), z1) -> c12(SUM2(cons(s(s(0)), z0), s(z1))) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) SUM2(cons(s(s(s(s(z0)))), z1), z2) -> c7(IFSUM(false, isZero(s(z0)), cons(s(s(s(s(z0)))), z1), z2)) SUM2(cons(s(s(0)), z0), z1) -> c8(IFSUM(false, false, cons(s(s(0)), z0), z1), ISZERO(s(s(0)))) SUM2(cons(s(s(s(0))), z0), z1) -> c8(IFSUM(isNil(cons(s(s(s(0))), z0)), false, cons(s(s(s(0))), z0), z1), ISZERO(s(s(s(0))))) IF(false, s(s(s(s(x0)))), x1, s(s(s(s(x2))))) -> c5(GEN(s(s(s(s(x0)))), x1, s(s(s(s(s(x2))))))) K tuples: SUM(z0) -> c6(SUM2(z0, 0)) GEN(s(x0), x1, s(x2)) -> c3(GE(s(x2), s(x0))) GEN(s(s(x0)), x1, s(s(x2))) -> c3(GE(s(s(x2)), s(s(x0)))) GEN(s(s(s(x0))), x1, s(s(s(x2)))) -> c3(GE(s(s(s(x2))), s(s(s(x0))))) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: SUM_1, IFSUM_4, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2, IF_4 Compound Symbols: c6_1, c10_1, c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_1, c7_1, c4_1, c8_2, c8_1, c12_2, c3_2, c5_1