KILLED proof of input_YV64cxFKOt.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). (0) CpxTRS (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxTRS (3) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (4) CpxTRS (5) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (6) CpxWeightedTrs (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxTypedWeightedTrs (9) CompletionProof [UPPER BOUND(ID), 0 ms] (10) CpxTypedWeightedCompleteTrs (11) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CpxTypedWeightedCompleteTrs (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 11 ms] (14) CpxRNTS (15) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CpxRNTS (17) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 4 ms] (18) CpxRNTS (19) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (20) CpxRNTS (21) IntTrsBoundProof [UPPER BOUND(ID), 252 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 80 ms] (24) CpxRNTS (25) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (26) CpxRNTS (27) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 57 ms] (30) CpxRNTS (31) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (32) CpxRNTS (33) IntTrsBoundProof [UPPER BOUND(ID), 428 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 168 ms] (36) CpxRNTS (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (38) CpxRNTS (39) IntTrsBoundProof [UPPER BOUND(ID), 160 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (42) CpxRNTS (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (44) CpxRNTS (45) IntTrsBoundProof [UPPER BOUND(ID), 71 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (48) CpxRNTS (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 201 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 85 ms] (54) CpxRNTS (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 97 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 11 ms] (60) CpxRNTS (61) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 17.5 s] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 13.9 s] (66) CpxRNTS (67) CompletionProof [UPPER BOUND(ID), 0 ms] (68) CpxTypedWeightedCompleteTrs (69) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 14 ms] (70) CpxRNTS (71) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (72) CdtProblem (73) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (74) CdtProblem (75) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (76) CdtProblem (77) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (78) CdtProblem (79) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (80) CdtProblem (81) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (82) CdtProblem (83) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CdtProblem (85) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 3 ms] (86) CdtProblem (87) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (88) CdtProblem (89) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (90) CdtProblem (91) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (92) CdtProblem (93) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (94) CdtProblem (95) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (96) CdtProblem (97) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 51 ms] (98) CdtProblem (99) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 28 ms] (100) CdtProblem (101) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CdtProblem (103) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (104) CdtProblem (105) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CdtProblem (109) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (110) CdtProblem (111) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CdtProblem (113) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (114) CdtProblem (115) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 42 ms] (116) CdtProblem (117) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 47 ms] (118) CdtProblem (119) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (120) CdtProblem (121) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 3 ms] (122) CdtProblem (123) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (124) CdtProblem (125) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (126) CdtProblem (127) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (128) CdtProblem (129) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (130) CdtProblem (131) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (132) CdtProblem (133) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (134) CdtProblem (135) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 37 ms] (136) CdtProblem (137) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (138) CdtProblem (139) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (140) CdtProblem (141) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (142) CdtProblem (143) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (144) CdtProblem (145) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (146) CdtProblem (147) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (148) CdtProblem (149) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (150) CdtProblem (151) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (152) CdtProblem (153) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 57 ms] (154) CdtProblem (155) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 36 ms] (156) CdtProblem (157) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (158) CdtProblem (159) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (160) CdtProblem (161) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (162) CdtProblem (163) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (164) CdtProblem (165) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (166) CdtProblem (167) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (168) CdtProblem (169) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (170) CdtProblem (171) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (172) CdtProblem (173) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (174) CdtProblem (175) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (176) CdtProblem (177) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (178) CdtProblem (179) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (180) CdtProblem (181) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (182) CdtProblem (183) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (184) CdtProblem (185) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (186) CdtProblem (187) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 43 ms] (188) CdtProblem (189) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (190) CdtProblem (191) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (194) CdtProblem (195) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (210) CdtProblem (211) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (216) CdtProblem (217) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (218) CdtProblem (219) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) 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) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: 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 ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (8) 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 ---------------------------------------- (9) CompletionProof (UPPER BOUND(ID)) The transformation into a RNTS is sound, since: (a) The obligation is a constructor system where every type has a constant constructor, (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: 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 ---------------------------------------- (10) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: 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 ---------------------------------------- (11) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (12) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: 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 ---------------------------------------- (13) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 2 nil => 0 false => 1 error => 1 c => 0 d => 1 null_p => 0 null_isZero => 0 null_ge => 0 ---------------------------------------- (14) 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 ---------------------------------------- (15) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: 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 ---------------------------------------- (17) 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 } ---------------------------------------- (18) 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} ---------------------------------------- (19) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: 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} ---------------------------------------- (21) 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 ---------------------------------------- (22) 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] ---------------------------------------- (23) 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' ---------------------------------------- (24) 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] ---------------------------------------- (25) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: 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] ---------------------------------------- (27) 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' ---------------------------------------- (28) 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'] ---------------------------------------- (29) 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 ---------------------------------------- (30) 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'] ---------------------------------------- (31) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: 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'] ---------------------------------------- (33) 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 ---------------------------------------- (34) 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] ---------------------------------------- (35) 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' ---------------------------------------- (36) 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] ---------------------------------------- (37) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: 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] ---------------------------------------- (39) 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' ---------------------------------------- (40) 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'] ---------------------------------------- (41) 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 ---------------------------------------- (42) 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'] ---------------------------------------- (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'') -{ 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'] ---------------------------------------- (45) 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 ---------------------------------------- (46) 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] ---------------------------------------- (47) 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 ---------------------------------------- (48) 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] ---------------------------------------- (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'') -{ 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] ---------------------------------------- (51) 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' ---------------------------------------- (52) 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'] ---------------------------------------- (53) 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' ---------------------------------------- (54) 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'] ---------------------------------------- (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'') -{ 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'] ---------------------------------------- (57) 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 ---------------------------------------- (58) 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] ---------------------------------------- (59) 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 ---------------------------------------- (60) 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] ---------------------------------------- (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) -{ 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] ---------------------------------------- (63) 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: ? ---------------------------------------- (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) -{ 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 ---------------------------------------- (65) 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: ? ---------------------------------------- (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) -{ 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 ---------------------------------------- (67) 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 ---------------------------------------- (68) 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 ---------------------------------------- (69) 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 ---------------------------------------- (70) 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. ---------------------------------------- (71) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (72) 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 ---------------------------------------- (73) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 16 trailing nodes: A -> c29 IF(true, z0, z1, z2) -> c4 TAIL(nil) -> c16 IFSUM(true, z0, z1, z2) -> c9 P(s(0)) -> c24 P(0) -> c23 TAIL(cons(z0, z1)) -> c17 GE(z0, 0) -> c26 HEAD(cons(z0, z1)) -> c18 GE(0, s(z0)) -> c27 HEAD(nil) -> c19 ISNIL(nil) -> c14 A -> c30 ISZERO(s(0)) -> c21 ISNIL(cons(z0, z1)) -> c15 ISZERO(0) -> c20 ---------------------------------------- (74) 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 ---------------------------------------- (75) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 5 trailing tuple parts ---------------------------------------- (76) 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 ---------------------------------------- (77) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (78) 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 ---------------------------------------- (79) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 2 leading nodes: TIMES(z0, z1) -> c4(GENERATE(z0, z1)) GENERATE(z0, z1) -> c2(GEN(z0, z1, 0)) ---------------------------------------- (80) 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 ---------------------------------------- (81) 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)) ---------------------------------------- (82) 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 ---------------------------------------- (83) 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 ---------------------------------------- (84) 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 ---------------------------------------- (85) 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))) ---------------------------------------- (86) 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 ---------------------------------------- (87) 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)) ---------------------------------------- (88) 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 ---------------------------------------- (89) 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)) ---------------------------------------- (90) 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 ---------------------------------------- (91) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: SUM2(nil, x1) -> c7(IFSUM(true, isZero(head(nil)), nil, x1)) ---------------------------------------- (92) 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 ---------------------------------------- (93) 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)))) ---------------------------------------- (94) 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 ---------------------------------------- (95) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (96) 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 ---------------------------------------- (97) 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 ---------------------------------------- (98) 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 ---------------------------------------- (99) 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 ---------------------------------------- (100) 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 ---------------------------------------- (101) 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)) ---------------------------------------- (102) 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 ---------------------------------------- (103) 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))) ---------------------------------------- (104) 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 ---------------------------------------- (105) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (106) 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 ---------------------------------------- (107) 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))) ---------------------------------------- (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: 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 ---------------------------------------- (109) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: generate(z0, z1) -> gen(z0, z1, 0) ---------------------------------------- (110) 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 ---------------------------------------- (111) 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))) ---------------------------------------- (112) 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 ---------------------------------------- (113) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (114) 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 ---------------------------------------- (115) 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 ---------------------------------------- (116) 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 ---------------------------------------- (117) 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 ---------------------------------------- (118) 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 ---------------------------------------- (119) 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)) ---------------------------------------- (120) 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 ---------------------------------------- (121) 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)) ---------------------------------------- (122) 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 ---------------------------------------- (123) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: SUM2(nil, x0) -> c7(IFSUM(true, isZero(error), nil, x0)) ---------------------------------------- (124) 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 ---------------------------------------- (125) 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)) ---------------------------------------- (126) 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 ---------------------------------------- (127) 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)))) ---------------------------------------- (128) 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 ---------------------------------------- (129) 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))) ---------------------------------------- (130) 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 ---------------------------------------- (131) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (132) 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 ---------------------------------------- (133) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: isNil(nil) -> true ---------------------------------------- (134) 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 ---------------------------------------- (135) 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 ---------------------------------------- (136) 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 ---------------------------------------- (137) 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)))) ---------------------------------------- (138) 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 ---------------------------------------- (139) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace SUM2(nil, x1) -> c8(ISZERO(head(nil))) by SUM2(nil, x0) -> c8(ISZERO(error)) ---------------------------------------- (140) 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 ---------------------------------------- (141) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: SUM2(nil, x0) -> c8(ISZERO(error)) IFSUM2(true, nil, x1) -> c11(SUM2(nil, x1)) ---------------------------------------- (142) 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 ---------------------------------------- (143) 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)) ---------------------------------------- (144) 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 ---------------------------------------- (145) 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))) ---------------------------------------- (146) 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 ---------------------------------------- (147) 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))) ---------------------------------------- (148) 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 ---------------------------------------- (149) 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)))) ---------------------------------------- (150) 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 ---------------------------------------- (151) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (152) 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 ---------------------------------------- (153) 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:none 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)) = 0 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)) = [1] + x_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_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = 0 POL(error) = 0 POL(false) = 0 POL(ge(x_1, x_2)) = 0 POL(gen(x_1, x_2, x_3)) = [3] + [3]x_1 + [3]x_2 + [3]x_3 POL(head(x_1)) = 0 POL(if(x_1, x_2, x_3, x_4)) = [2]x_2 + [3]x_3 POL(isNil(x_1)) = [3] + [3]x_1 POL(isZero(x_1)) = [3] POL(nil) = 0 POL(p(x_1)) = [3] POL(s(x_1)) = x_1 POL(tail(x_1)) = [3] POL(true) = 0 ---------------------------------------- (154) 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 ---------------------------------------- (155) 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 ---------------------------------------- (156) 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 ---------------------------------------- (157) 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)) ---------------------------------------- (158) 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 ---------------------------------------- (159) 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)) ---------------------------------------- (160) 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 ---------------------------------------- (161) 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)) ---------------------------------------- (162) 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 ---------------------------------------- (163) 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)))) ---------------------------------------- (164) 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 ---------------------------------------- (165) 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)))) ---------------------------------------- (166) 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 ---------------------------------------- (167) 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)))) ---------------------------------------- (168) 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 ---------------------------------------- (169) 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)) ---------------------------------------- (170) 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 ---------------------------------------- (171) 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)) ---------------------------------------- (172) 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 ---------------------------------------- (173) 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)) ---------------------------------------- (174) 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 ---------------------------------------- (175) 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)))) ---------------------------------------- (176) 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 ---------------------------------------- (177) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (178) 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 ---------------------------------------- (179) 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))) ---------------------------------------- (180) 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 ---------------------------------------- (181) 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))) ---------------------------------------- (182) 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 ---------------------------------------- (183) 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))))) ---------------------------------------- (184) 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 ---------------------------------------- (185) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (186) 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 ---------------------------------------- (187) 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 ---------------------------------------- (188) 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 ---------------------------------------- (189) 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)) ---------------------------------------- (190) 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 ---------------------------------------- (191) 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)) ---------------------------------------- (192) 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 ---------------------------------------- (193) 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)) ---------------------------------------- (194) 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 ---------------------------------------- (195) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (196) 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 ---------------------------------------- (197) 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)) ---------------------------------------- (198) 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 ---------------------------------------- (199) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (200) 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 ---------------------------------------- (201) 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)))) ---------------------------------------- (202) 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 ---------------------------------------- (203) 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)))) ---------------------------------------- (204) 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 ---------------------------------------- (205) 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)) ---------------------------------------- (206) 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 ---------------------------------------- (207) 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))))))) ---------------------------------------- (208) 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, 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)) 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)) 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)) 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 ---------------------------------------- (209) 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))))) ---------------------------------------- (210) 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, 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(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(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)) 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)) 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(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)) 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 ---------------------------------------- (211) 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)))) ---------------------------------------- (212) 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, 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(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(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)) 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))))))) IFSUM2(false, cons(s(s(z0)), z1), z2) -> c12(SUM2(cons(s(p(s(z0))), z1), s(z2)), P(s(s(z0)))) 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)) 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(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)) 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))))))) 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(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 ---------------------------------------- (213) 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))) ---------------------------------------- (214) 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, 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(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(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)) 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))))))) 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: 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)) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) 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)) 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))))))) 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(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 ---------------------------------------- (215) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace IFSUM(false, z0, z1, z2) -> c10(IFSUM2(z0, z1, z2)) by IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) ---------------------------------------- (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 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)) 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, 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(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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) S tuples: 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)) IFSUM2(false, cons(s(0), x1), x2) -> c12(SUM2(cons(0, tail(cons(s(0), x1))), s(x2))) 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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), 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, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2, IF_4, IFSUM_4 Compound Symbols: c6_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, c10_1 ---------------------------------------- (217) 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))) ---------------------------------------- (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 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)) 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) S tuples: 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) 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, ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2, IF_4, IFSUM_4 Compound Symbols: c6_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, c10_1 ---------------------------------------- (219) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace SUM(z0) -> c6(SUM2(z0, 0)) by SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) ---------------------------------------- (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 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: 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) S tuples: 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) K tuples: 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))))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, TIMES_2, IF_4, IFSUM_4, SUM_1 Compound Symbols: 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, c10_1, c6_1 ---------------------------------------- (221) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TIMES(z0, z1) -> c4(SUM(if(ge(0, z0), z0, z1, 0))) by TIMES(0, x1) -> c4(SUM(if(true, 0, x1, 0))) TIMES(s(z0), x1) -> c4(SUM(if(false, s(z0), x1, 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 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: 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)) 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) TIMES(0, x1) -> c4(SUM(if(true, 0, x1, 0))) TIMES(s(z0), x1) -> c4(SUM(if(false, s(z0), x1, 0))) S tuples: 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) K tuples: 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))))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, IF_4, IFSUM_4, SUM_1, TIMES_2 Compound Symbols: c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_1, c7_1, c8_2, c8_1, c12_2, c3_2, c5_1, c10_1, c6_1, c4_1 ---------------------------------------- (223) 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)) ---------------------------------------- (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 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: 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)) 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) TIMES(0, x1) -> c4(SUM(if(true, 0, x1, 0))) TIMES(s(z0), x1) -> c4(SUM(if(false, s(z0), x1, 0))) SUM2(cons(s(s(s(0))), z0), z1) -> c7(IFSUM(false, false, cons(s(s(s(0))), z0), z1)) S tuples: 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) 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: 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))))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, IF_4, IFSUM_4, SUM_1, TIMES_2 Compound Symbols: c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_1, c7_1, c8_2, c8_1, c12_2, c3_2, c5_1, c10_1, c6_1, c4_1 ---------------------------------------- (225) 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)) ---------------------------------------- (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 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: 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)) 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) IFSUM2(false, cons(s(0), z0), z1) -> c12(SUM2(cons(0, z0), s(z1))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) TIMES(0, x1) -> c4(SUM(if(true, 0, x1, 0))) TIMES(s(z0), x1) -> c4(SUM(if(false, s(z0), x1, 0))) 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: 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(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)) 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))))))) 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))) IFSUM(false, y0, cons(x0, x1), x2) -> c10(IFSUM2(y0, cons(x0, x1), x2)) IFSUM(false, true, cons(0, x0), x1) -> c10(IFSUM2(true, cons(0, x0), x1)) IFSUM(false, false, cons(s(0), x0), x1) -> c10(IFSUM2(false, cons(s(0), x0), x1)) IFSUM(false, y0, cons(s(s(x0)), x1), x2) -> c10(IFSUM2(y0, cons(s(s(x0)), x1), x2)) IFSUM(false, false, cons(s(s(0)), x0), x1) -> c10(IFSUM2(false, cons(s(s(0)), x0), x1)) IFSUM(false, false, cons(s(s(s(0))), x0), x1) -> c10(IFSUM2(false, cons(s(s(s(0))), x0), x1)) IFSUM(false, y1, cons(s(s(s(s(x0)))), x1), x2) -> c10(IFSUM2(y1, cons(s(s(s(s(x0)))), x1), x2)) IFSUM(false, y0, cons(s(s(s(x0))), x1), x2) -> c10(IFSUM2(y0, cons(s(s(s(x0))), x1), x2)) 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: 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))))) SUM(cons(y0, y1)) -> c6(SUM2(cons(y0, y1), 0)) SUM(cons(0, y0)) -> c6(SUM2(cons(0, y0), 0)) SUM(cons(s(0), y0)) -> c6(SUM2(cons(s(0), y0), 0)) SUM(cons(s(s(y0)), y1)) -> c6(SUM2(cons(s(s(y0)), y1), 0)) SUM(cons(s(s(0)), y0)) -> c6(SUM2(cons(s(s(0)), y0), 0)) SUM(cons(s(s(s(0))), y0)) -> c6(SUM2(cons(s(s(s(0))), y0), 0)) SUM(cons(s(s(s(s(y0)))), y1)) -> c6(SUM2(cons(s(s(s(s(y0)))), y1), 0)) SUM(cons(s(s(s(y0))), y1)) -> c6(SUM2(cons(s(s(s(y0))), y1), 0)) Defined Rule Symbols: p_1, head_1, tail_1, isZero_1, gen_3, if_4, ge_2, isNil_1 Defined Pair Symbols: ISZERO_1, P_1, GE_2, IFSUM2_3, GEN_3, SUM2_2, IF_4, IFSUM_4, SUM_1, TIMES_2 Compound Symbols: c22_1, c25_1, c28_1, c13_1, c11_1, c12_1, c3_1, c7_1, c8_2, c8_1, c12_2, c3_2, c5_1, c10_1, c6_1, c4_1