KILLED proof of input_JkkmYPuR3k.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), 25 ms] (12) CpxTypedWeightedCompleteTrs (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (14) CpxRNTS (15) InliningProof [UPPER BOUND(ID), 768 ms] (16) CpxRNTS (17) SimplificationProof [BOTH BOUNDS(ID, ID), 68 ms] (18) CpxRNTS (19) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (20) CpxRNTS (21) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 238 ms] (24) CpxRNTS (25) IntTrsBoundProof [UPPER BOUND(ID), 58 ms] (26) CpxRNTS (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 384 ms] (30) CpxRNTS (31) IntTrsBoundProof [UPPER BOUND(ID), 148 ms] (32) CpxRNTS (33) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 222 ms] (36) CpxRNTS (37) IntTrsBoundProof [UPPER BOUND(ID), 80 ms] (38) CpxRNTS (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 182 ms] (42) CpxRNTS (43) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (44) CpxRNTS (45) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 435 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 136 ms] (50) CpxRNTS (51) ResultPropagationProof [UPPER BOUND(ID), 2 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 384 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 136 ms] (56) CpxRNTS (57) ResultPropagationProof [UPPER BOUND(ID), 2 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 211 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (62) CpxRNTS (63) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 284 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 98 ms] (68) CpxRNTS (69) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 509 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 218 ms] (74) CpxRNTS (75) ResultPropagationProof [UPPER BOUND(ID), 12 ms] (76) CpxRNTS (77) CompletionProof [UPPER BOUND(ID), 0 ms] (78) CpxTypedWeightedCompleteTrs (79) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (80) CpxRNTS (81) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (82) CdtProblem (83) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CdtProblem (85) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (86) CdtProblem (87) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 6 ms] (88) CdtProblem (89) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 410 ms] (90) CdtProblem (91) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (92) CdtProblem (93) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (94) CdtProblem (95) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (96) CdtProblem (97) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (98) CdtProblem (99) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (100) CdtProblem (101) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CdtProblem (103) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 164 ms] (104) CdtProblem (105) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CdtProblem (107) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (108) CdtProblem (109) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (110) CdtProblem (111) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CdtProblem (113) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 166 ms] (114) CdtProblem (115) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (116) CdtProblem (117) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (118) CdtProblem (119) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 168 ms] (120) CdtProblem (121) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (122) CdtProblem (123) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (124) CdtProblem (125) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (126) CdtProblem (127) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (128) CdtProblem (129) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 204 ms] (130) CdtProblem (131) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (132) CdtProblem (133) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (134) CdtProblem (135) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 180 ms] (136) CdtProblem (137) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (138) CdtProblem (139) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (140) CdtProblem (141) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (142) CdtProblem (143) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (144) CdtProblem (145) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 204 ms] (146) CdtProblem (147) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 5 ms] (148) CdtProblem (149) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (150) CdtProblem (151) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 183 ms] (152) CdtProblem (153) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (154) CdtProblem (155) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (156) CdtProblem (157) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (158) CdtProblem (159) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 166 ms] (160) CdtProblem (161) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (162) CdtProblem (163) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (164) CdtProblem (165) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 192 ms] (166) CdtProblem (167) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (168) CdtProblem (169) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 232 ms] (170) CdtProblem (171) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (172) CdtProblem (173) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (174) CdtProblem (175) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (176) CdtProblem (177) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (178) CdtProblem (179) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (180) CdtProblem (181) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (182) CdtProblem (183) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 257 ms] (184) CdtProblem (185) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (186) CdtProblem (187) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (188) CdtProblem (189) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 236 ms] (190) CdtProblem (191) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 193 ms] (194) CdtProblem (195) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 6 ms] (196) CdtProblem (197) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 200 ms] (202) CdtProblem (203) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 281 ms] (204) CdtProblem (205) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (210) CdtProblem (211) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 263 ms] (216) CdtProblem (217) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 303 ms] (218) CdtProblem (219) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 235 ms] (230) CdtProblem (231) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 300 ms] (236) CdtProblem (237) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 327 ms] (240) CdtProblem (241) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (242) CdtProblem (243) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (244) CdtProblem (245) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 322 ms] (248) CdtProblem (249) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 394 ms] (250) CdtProblem (251) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (252) CdtProblem (253) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem (259) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (260) CdtProblem (261) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 373 ms] (262) CdtProblem (263) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 451 ms] (264) CdtProblem (265) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 9 ms] (266) CdtProblem (267) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (268) CdtProblem (269) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 1 ms] (270) CdtProblem (271) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (272) CdtProblem (273) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (274) CdtProblem (275) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 516 ms] (276) CdtProblem (277) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 151 ms] (278) CdtProblem (279) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (280) CdtProblem (281) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (282) CdtProblem (283) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 255 ms] (284) CdtProblem (285) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (286) CdtProblem (287) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (288) 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: fstsplit(0, x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) sndsplit(0, x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(h, t)) -> false leq(0, m) -> true leq(s(n), 0) -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0 length(cons(h, t)) -> s(length(t)) app(nil, x) -> x app(cons(h, t), x) -> cons(h, app(t, x)) map_f(pid, nil) -> nil map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) head(cons(h, t)) -> h tail(cons(h, t)) -> t ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) 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: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(h, t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(h, t)) -> s(length(t)) app(nil, x) -> x app(cons(h, t), x) -> cons(h, app(t, x)) map_f(pid, nil) -> nil map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) head(cons(h, t)) -> h tail(cons(h, t)) -> t ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) 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: fstsplit(0, x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) sndsplit(0, x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(h, t)) -> false leq(0, m) -> true leq(s(n), 0) -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0 length(cons(h, t)) -> s(length(t)) app(nil, x) -> x app(cons(h, t), x) -> cons(h, app(t, x)) map_f(pid, nil) -> nil map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) head(cons(h, t)) -> h tail(cons(h, t)) -> t ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) 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: fstsplit(0, x) -> nil [1] fstsplit(s(n), nil) -> nil [1] fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) [1] sndsplit(0, x) -> x [1] sndsplit(s(n), nil) -> nil [1] sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) [1] empty(nil) -> true [1] empty(cons(h, t)) -> false [1] leq(0, m) -> true [1] leq(s(n), 0) -> false [1] leq(s(n), s(m)) -> leq(n, m) [1] length(nil) -> 0 [1] length(cons(h, t)) -> s(length(t)) [1] app(nil, x) -> x [1] app(cons(h, t), x) -> cons(h, app(t, x)) [1] map_f(pid, nil) -> nil [1] map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) [1] head(cons(h, t)) -> h [1] tail(cons(h, t)) -> t [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) [1] if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) [1] if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) [1] if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) [1] if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) [1] if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) [1] if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) [1] if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) [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: fstsplit(0, x) -> nil [1] fstsplit(s(n), nil) -> nil [1] fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) [1] sndsplit(0, x) -> x [1] sndsplit(s(n), nil) -> nil [1] sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) [1] empty(nil) -> true [1] empty(cons(h, t)) -> false [1] leq(0, m) -> true [1] leq(s(n), 0) -> false [1] leq(s(n), s(m)) -> leq(n, m) [1] length(nil) -> 0 [1] length(cons(h, t)) -> s(length(t)) [1] app(nil, x) -> x [1] app(cons(h, t), x) -> cons(h, app(t, x)) [1] map_f(pid, nil) -> nil [1] map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) [1] head(cons(h, t)) -> h [1] tail(cons(h, t)) -> t [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) [1] if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) [1] if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) [1] if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) [1] if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) [1] if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) [1] if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) [1] if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) [1] The TRS has the following type information: fstsplit :: 0:s -> nil:cons:f -> nil:cons:f 0 :: 0:s nil :: nil:cons:f s :: 0:s -> 0:s cons :: nil:cons:f -> nil:cons:f -> nil:cons:f sndsplit :: 0:s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0:s -> 0:s -> true:false length :: nil:cons:f -> 0:s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f f :: two:three -> nil:cons:f -> nil:cons:f head :: nil:cons:f -> nil:cons:f tail :: nil:cons:f -> nil:cons:f ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 two :: two:three if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 three :: two:three if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 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: ring_6 if_1_7 if_2_7 if_3_7 if_4_7 if_5_7 if_6_7 if_7_7 if_8_7 if_9_7 (c) The following functions are completely defined: empty_1 fstsplit_2 map_f_2 head_1 leq_2 length_1 tail_1 app_2 sndsplit_2 Due to the following rules being added: empty(v0) -> null_empty [0] fstsplit(v0, v1) -> nil [0] map_f(v0, v1) -> nil [0] head(v0) -> nil [0] length(v0) -> 0 [0] tail(v0) -> nil [0] app(v0, v1) -> nil [0] sndsplit(v0, v1) -> nil [0] And the following fresh constants: null_empty, const ---------------------------------------- (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: fstsplit(0, x) -> nil [1] fstsplit(s(n), nil) -> nil [1] fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) [1] sndsplit(0, x) -> x [1] sndsplit(s(n), nil) -> nil [1] sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) [1] empty(nil) -> true [1] empty(cons(h, t)) -> false [1] leq(0, m) -> true [1] leq(s(n), 0) -> false [1] leq(s(n), s(m)) -> leq(n, m) [1] length(nil) -> 0 [1] length(cons(h, t)) -> s(length(t)) [1] app(nil, x) -> x [1] app(cons(h, t), x) -> cons(h, app(t, x)) [1] map_f(pid, nil) -> nil [1] map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) [1] head(cons(h, t)) -> h [1] tail(cons(h, t)) -> t [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) [1] if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) [1] if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) [1] if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) [1] if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) [1] if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) [1] if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) [1] if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) [1] empty(v0) -> null_empty [0] fstsplit(v0, v1) -> nil [0] map_f(v0, v1) -> nil [0] head(v0) -> nil [0] length(v0) -> 0 [0] tail(v0) -> nil [0] app(v0, v1) -> nil [0] sndsplit(v0, v1) -> nil [0] The TRS has the following type information: fstsplit :: 0:s -> nil:cons:f -> nil:cons:f 0 :: 0:s nil :: nil:cons:f s :: 0:s -> 0:s cons :: nil:cons:f -> nil:cons:f -> nil:cons:f sndsplit :: 0:s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false:null_empty true :: true:false:null_empty false :: true:false:null_empty leq :: 0:s -> 0:s -> true:false:null_empty length :: nil:cons:f -> 0:s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f f :: two:three -> nil:cons:f -> nil:cons:f head :: nil:cons:f -> nil:cons:f tail :: nil:cons:f -> nil:cons:f ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 two :: two:three if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 three :: two:three if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 null_empty :: true:false:null_empty const :: ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 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: fstsplit(0, x) -> nil [1] fstsplit(s(n), nil) -> nil [1] fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) [1] sndsplit(0, x) -> x [1] sndsplit(s(n), nil) -> nil [1] sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) [1] empty(nil) -> true [1] empty(cons(h, t)) -> false [1] leq(0, m) -> true [1] leq(s(n), 0) -> false [1] leq(s(n), s(m)) -> leq(n, m) [1] length(nil) -> 0 [1] length(cons(h, t)) -> s(length(t)) [1] app(nil, x) -> x [1] app(cons(h, t), x) -> cons(h, app(t, x)) [1] map_f(pid, nil) -> nil [1] map_f(pid, cons(h, nil)) -> app(f(pid, h), nil) [2] map_f(pid, cons(h, cons(h', t'))) -> app(f(pid, h), app(f(pid, h'), map_f(pid, t'))) [2] map_f(pid, cons(h, t)) -> app(f(pid, h), nil) [1] head(cons(h, t)) -> h [1] tail(cons(h, t)) -> t [1] ring(st_1, in_2, st_2, in_3, st_3, 0) -> if_1(st_1, in_2, st_2, in_3, st_3, 0, empty(nil)) [2] ring(nil, in_2, st_2, in_3, st_3, s(n')) -> if_1(nil, in_2, st_2, in_3, st_3, s(n'), empty(nil)) [2] ring(cons(h'', t''), in_2, st_2, in_3, st_3, s(n'')) -> if_1(cons(h'', t''), in_2, st_2, in_3, st_3, s(n''), empty(cons(h'', fstsplit(n'', t'')))) [2] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(nil)) [1] if_1(st_1, in_2, st_2, in_3, st_3, 0, false) -> ring(st_1, cons(nil, in_2), st_2, in_3, st_3, 0) [3] if_1(st_1, in_2, st_2, in_3, st_3, 0, false) -> ring(st_1, cons(nil, in_2), st_2, in_3, st_3, 0) [2] if_1(nil, in_2, st_2, in_3, st_3, s(n1), false) -> ring(nil, cons(nil, in_2), st_2, in_3, st_3, s(n1)) [3] if_1(nil, in_2, st_2, in_3, st_3, s(n1), false) -> ring(nil, cons(nil, in_2), st_2, in_3, st_3, s(n1)) [2] if_1(cons(h1, t1), in_2, st_2, in_3, st_3, s(n2), false) -> ring(sndsplit(n2, t1), cons(cons(h1, fstsplit(n2, t1)), in_2), st_2, in_3, st_3, s(n2)) [3] if_1(cons(h1, t1), in_2, st_2, in_3, st_3, s(n2), false) -> ring(sndsplit(n2, t1), cons(nil, in_2), st_2, in_3, st_3, s(n2)) [2] if_1(st_1, in_2, st_2, in_3, st_3, 0, false) -> ring(nil, cons(nil, in_2), st_2, in_3, st_3, 0) [2] if_1(nil, in_2, st_2, in_3, st_3, s(n3), false) -> ring(nil, cons(nil, in_2), st_2, in_3, st_3, s(n3)) [2] if_1(cons(h2, t2), in_2, st_2, in_3, st_3, s(n4), false) -> ring(nil, cons(cons(h2, fstsplit(n4, t2)), in_2), st_2, in_3, st_3, s(n4)) [2] if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(nil, cons(nil, in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, nil, in_3, st_3, m) -> if_2(st_1, in_2, nil, in_3, st_3, m, leq(m, 0)) [2] ring(st_1, in_2, cons(h3, t3), in_3, st_3, m) -> if_2(st_1, in_2, cons(h3, t3), in_3, st_3, m, leq(m, s(length(t3)))) [2] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, 0)) [1] if_2(st_1, in_2, st_2, in_3, st_3, 0, true) -> if_3(st_1, in_2, st_2, in_3, st_3, 0, empty(nil)) [2] if_2(st_1, in_2, nil, in_3, st_3, s(n5), true) -> if_3(st_1, in_2, nil, in_3, st_3, s(n5), empty(nil)) [2] if_2(st_1, in_2, cons(h4, t4), in_3, st_3, s(n6), true) -> if_3(st_1, in_2, cons(h4, t4), in_3, st_3, s(n6), empty(cons(h4, fstsplit(n6, t4)))) [2] if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(nil)) [1] if_3(st_1, in_2, st_2, in_3, st_3, 0, false) -> ring(st_1, in_2, st_2, cons(nil, in_3), st_3, 0) [3] if_3(st_1, in_2, st_2, in_3, st_3, 0, false) -> ring(st_1, in_2, st_2, cons(nil, in_3), st_3, 0) [2] if_3(st_1, in_2, nil, in_3, st_3, s(n7), false) -> ring(st_1, in_2, nil, cons(nil, in_3), st_3, s(n7)) [3] if_3(st_1, in_2, nil, in_3, st_3, s(n7), false) -> ring(st_1, in_2, nil, cons(nil, in_3), st_3, s(n7)) [2] if_3(st_1, in_2, cons(h5, t5), in_3, st_3, s(n8), false) -> ring(st_1, in_2, sndsplit(n8, t5), cons(cons(h5, fstsplit(n8, t5)), in_3), st_3, s(n8)) [3] if_3(st_1, in_2, cons(h5, t5), in_3, st_3, s(n8), false) -> ring(st_1, in_2, sndsplit(n8, t5), cons(nil, in_3), st_3, s(n8)) [2] if_3(st_1, in_2, st_2, in_3, st_3, 0, false) -> ring(st_1, in_2, nil, cons(nil, in_3), st_3, 0) [2] if_3(st_1, in_2, nil, in_3, st_3, s(n9), false) -> ring(st_1, in_2, nil, cons(nil, in_3), st_3, s(n9)) [2] if_3(st_1, in_2, cons(h6, t6), in_3, st_3, s(n10), false) -> ring(st_1, in_2, nil, cons(cons(h6, fstsplit(n10, t6)), in_3), st_3, s(n10)) [2] if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, nil, cons(nil, in_3), st_3, m) [1] if_2(st_1, cons(h7, t7), st_2, in_3, st_3, m, false) -> if_4(st_1, cons(h7, t7), st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, h7), st_2)))) [2] if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, nil), st_2)))) [1] if_4(st_1, cons(h8, t8), st_2, in_3, st_3, m, false) -> ring(st_1, t8, sndsplit(m, app(map_f(two, h8), st_2)), cons(fstsplit(m, app(map_f(two, h8), st_2)), in_3), st_3, m) [4] if_4(st_1, cons(h8, t8), st_2, in_3, st_3, m, false) -> ring(st_1, t8, sndsplit(m, app(map_f(two, h8), st_2)), cons(fstsplit(m, app(map_f(two, nil), st_2)), in_3), st_3, m) [3] if_4(st_1, cons(h8, t8), st_2, in_3, st_3, m, false) -> ring(st_1, t8, sndsplit(m, app(map_f(two, nil), st_2)), cons(fstsplit(m, app(map_f(two, h8), st_2)), in_3), st_3, m) [3] if_4(st_1, cons(h8, t8), st_2, in_3, st_3, m, false) -> ring(st_1, t8, sndsplit(m, app(map_f(two, nil), st_2)), cons(fstsplit(m, app(map_f(two, nil), st_2)), in_3), st_3, m) [2] if_4(st_1, cons(h9, t9), st_2, in_3, st_3, m, false) -> ring(st_1, nil, sndsplit(m, app(map_f(two, h9), st_2)), cons(fstsplit(m, app(map_f(two, h9), st_2)), in_3), st_3, m) [3] if_4(st_1, cons(h9, t9), st_2, in_3, st_3, m, false) -> ring(st_1, nil, sndsplit(m, app(map_f(two, h9), st_2)), cons(fstsplit(m, app(map_f(two, nil), st_2)), in_3), st_3, m) [2] if_4(st_1, cons(h10, t10), st_2, in_3, st_3, m, false) -> ring(st_1, nil, sndsplit(m, app(map_f(two, nil), st_2)), cons(fstsplit(m, app(map_f(two, h10), st_2)), in_3), st_3, m) [2] if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, nil, sndsplit(m, app(map_f(two, nil), st_2)), cons(fstsplit(m, app(map_f(two, nil), st_2)), in_3), st_3, m) [1] ring(st_1, cons(h11, t11), st_2, in_3, st_3, m) -> if_5(st_1, cons(h11, t11), st_2, in_3, st_3, m, empty(map_f(two, h11))) [2] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, nil))) [1] if_5(st_1, cons(h12, t12), st_2, in_3, st_3, m, true) -> ring(st_1, t12, st_2, in_3, st_3, m) [2] if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, nil, st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, nil, m) -> if_6(st_1, in_2, st_2, in_3, nil, m, leq(m, 0)) [2] ring(st_1, in_2, st_2, in_3, cons(h13, t13), m) -> if_6(st_1, in_2, st_2, in_3, cons(h13, t13), m, leq(m, s(length(t13)))) [2] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, 0)) [1] if_6(st_1, in_2, st_2, in_3, st_3, 0, true) -> if_7(st_1, in_2, st_2, in_3, st_3, 0, empty(nil)) [2] if_6(st_1, in_2, st_2, in_3, nil, s(n11), true) -> if_7(st_1, in_2, st_2, in_3, nil, s(n11), empty(nil)) [2] if_6(st_1, in_2, st_2, in_3, cons(h14, t14), s(n12), true) -> if_7(st_1, in_2, st_2, in_3, cons(h14, t14), s(n12), empty(cons(h14, fstsplit(n12, t14)))) [2] if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(nil)) [1] if_7(st_1, in_2, st_2, in_3, st_3, 0, false) -> ring(st_1, in_2, st_2, in_3, st_3, 0) [2] if_7(st_1, in_2, st_2, in_3, nil, s(n13), false) -> ring(st_1, in_2, st_2, in_3, nil, s(n13)) [2] if_7(st_1, in_2, st_2, in_3, cons(h15, t15), s(n14), false) -> ring(st_1, in_2, st_2, in_3, sndsplit(n14, t15), s(n14)) [2] if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, nil, m) [1] if_6(st_1, in_2, st_2, cons(h16, t16), st_3, m, false) -> if_8(st_1, in_2, st_2, cons(h16, t16), st_3, m, empty(fstsplit(m, app(map_f(three, h16), st_3)))) [2] if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, nil), st_3)))) [1] if_8(st_1, in_2, st_2, cons(h17, t17), st_3, m, false) -> ring(st_1, in_2, st_2, t17, sndsplit(m, app(map_f(three, h17), st_3)), m) [3] if_8(st_1, in_2, st_2, cons(h17, t17), st_3, m, false) -> ring(st_1, in_2, st_2, t17, sndsplit(m, app(map_f(three, nil), st_3)), m) [2] if_8(st_1, in_2, st_2, cons(h18, t18), st_3, m, false) -> ring(st_1, in_2, st_2, nil, sndsplit(m, app(map_f(three, h18), st_3)), m) [2] if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, nil, sndsplit(m, app(map_f(three, nil), st_3)), m) [1] ring(st_1, in_2, st_2, cons(h19, t19), st_3, m) -> if_9(st_1, in_2, st_2, cons(h19, t19), st_3, m, empty(map_f(three, h19))) [2] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, nil))) [1] if_9(st_1, in_2, st_2, cons(h20, t20), st_3, m, true) -> ring(st_1, in_2, st_2, t20, st_3, m) [2] if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, nil, st_3, m) [1] empty(v0) -> null_empty [0] fstsplit(v0, v1) -> nil [0] map_f(v0, v1) -> nil [0] head(v0) -> nil [0] length(v0) -> 0 [0] tail(v0) -> nil [0] app(v0, v1) -> nil [0] sndsplit(v0, v1) -> nil [0] The TRS has the following type information: fstsplit :: 0:s -> nil:cons:f -> nil:cons:f 0 :: 0:s nil :: nil:cons:f s :: 0:s -> 0:s cons :: nil:cons:f -> nil:cons:f -> nil:cons:f sndsplit :: 0:s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false:null_empty true :: true:false:null_empty false :: true:false:null_empty leq :: 0:s -> 0:s -> true:false:null_empty length :: nil:cons:f -> 0:s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f f :: two:three -> nil:cons:f -> nil:cons:f head :: nil:cons:f -> nil:cons:f tail :: nil:cons:f -> nil:cons:f ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 two :: two:three if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 three :: two:three if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0:s -> true:false:null_empty -> ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 null_empty :: true:false:null_empty const :: ring:if_1:if_2:if_3:if_4:if_5:if_6:if_7:if_8:if_9 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 nil => 0 true => 2 false => 1 two => 1 three => 0 null_empty => 0 const => 0 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> x :|: z' = x, x >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 app(z, z') -{ 1 }-> 1 + h + app(t, x) :|: z = 1 + h + t, z' = x, x >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 fstsplit(z, z') -{ 1 }-> 0 :|: z' = x, x >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: n >= 0, z = 1 + n, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(n, t) :|: z' = 1 + h + t, n >= 0, h >= 0, t >= 0, z = 1 + n head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, 1 + 0 + in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, 1 + 0 + in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(n2, t1), 1 + 0 + in_2, st_2, in_3, st_3, 1 + n2) :|: z' = in_2, st_3 >= 0, z3 = 1 + n2, z1 = in_3, n2 >= 0, t1 >= 0, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z = 1 + h1 + t1, h1 >= 0, z'' = st_2, z2 = st_3 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(n2, t1), 1 + (1 + h1 + fstsplit(n2, t1)) + in_2, st_2, in_3, st_3, 1 + n2) :|: z' = in_2, st_3 >= 0, z3 = 1 + n2, z1 = in_3, n2 >= 0, t1 >= 0, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z = 1 + h1 + t1, h1 >= 0, z'' = st_2, z2 = st_3 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 1 + n1) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z3 = 1 + n1, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, n1 >= 0, z = 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 1 + n1) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z3 = 1 + n1, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, n1 >= 0, z = 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 1 + n3) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 1 + n3, z2 = st_3, z1 = in_3, in_3 >= 0, z = 0, z4 = 1, in_2 >= 0, n3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(n4, t2)) + in_2, st_2, in_3, st_3, 1 + n4) :|: n4 >= 0, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, h2 >= 0, in_2 >= 0, t2 >= 0, z = 1 + h2 + t2, st_2 >= 0, z'' = st_2, z2 = st_3, z3 = 1 + n4 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(1, 0), st_2)))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(st_1, 1 + h7 + t7, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(1, h7), st_2)))) :|: z = st_1, st_3 >= 0, z' = 1 + h7 + t7, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, t7 >= 0, h7 >= 0, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(0)) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(st_1, in_2, st_2, in_3, st_3, 0, empty(0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(st_1, in_2, 0, in_3, st_3, 1 + n5, empty(0)) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, z2 = st_3, z3 = 1 + n5, z1 = in_3, z4 = 2, n5 >= 0, in_3 >= 0, st_1 >= 0, in_2 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(st_1, in_2, 1 + h4 + t4, in_3, st_3, 1 + n6, empty(1 + h4 + fstsplit(n6, t4))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, t4 >= 0, in_3 >= 0, in_2 >= 0, h4 >= 0, n6 >= 0, z2 = st_3, z3 = 1 + n6, st_1 >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, st_2, 1 + 0 + in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, 1 + 0 + in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, sndsplit(n8, t5), 1 + 0 + in_3, st_3, 1 + n8) :|: z = st_1, h5 >= 0, z' = in_2, st_3 >= 0, z1 = in_3, t5 >= 0, in_3 >= 0, z'' = 1 + h5 + t5, z4 = 1, in_2 >= 0, n8 >= 0, z2 = st_3, st_1 >= 0, z3 = 1 + n8 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, sndsplit(n8, t5), 1 + (1 + h5 + fstsplit(n8, t5)) + in_3, st_3, 1 + n8) :|: z = st_1, h5 >= 0, z' = in_2, st_3 >= 0, z1 = in_3, t5 >= 0, in_3 >= 0, z'' = 1 + h5 + t5, z4 = 1, in_2 >= 0, n8 >= 0, z2 = st_3, st_1 >= 0, z3 = 1 + n8 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 1 + n7) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, n7 >= 0, z2 = st_3, z1 = in_3, z3 = 1 + n7, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 1 + n7) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, n7 >= 0, z2 = st_3, z1 = in_3, z3 = 1 + n7, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 1 + n9) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, z2 = st_3, z1 = in_3, n9 >= 0, in_3 >= 0, z3 = 1 + n9, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + (1 + h6 + fstsplit(n10, t6)) + in_3, st_3, 1 + n10) :|: z = st_1, z' = in_2, st_3 >= 0, t6 >= 0, z1 = in_3, in_3 >= 0, n10 >= 0, z4 = 1, in_2 >= 0, h6 >= 0, z'' = 1 + h6 + t6, z3 = 1 + n10, z2 = st_3, st_1 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, h8), st_2)), 1 + fstsplit(m, app(map_f(1, h8), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, h8), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, h8), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, h9), st_2)), 1 + fstsplit(m, app(map_f(1, h9), st_2)) + in_3, st_3, m) :|: z = st_1, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, h9 >= 0, z'' = st_2, z2 = st_3, t9 >= 0, st_1 >= 0, z3 = m, z' = 1 + h9 + t9, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, h9), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, h9 >= 0, z'' = st_2, z2 = st_3, t9 >= 0, st_1 >= 0, z3 = m, z' = 1 + h9 + t9, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, h10), st_2)) + in_3, st_3, m) :|: z' = 1 + h10 + t10, z = st_1, h10 >= 0, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, t10 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, t12, st_2, in_3, st_3, m) :|: z' = 1 + h12 + t12, z = st_1, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, h12 >= 0, st_1 >= 0, t12 >= 0, z3 = m, m >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, 0, st_2, in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(0, 0), st_3)))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(st_1, in_2, st_2, 1 + h16 + t16, st_3, m, empty(fstsplit(m, app(map_f(0, h16), st_3)))) :|: z = st_1, z' = in_2, st_3 >= 0, h16 >= 0, z4 = 1, in_2 >= 0, z1 = 1 + h16 + t16, st_2 >= 0, t16 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(0)) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(st_1, in_2, st_2, in_3, st_3, 0, empty(0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(st_1, in_2, st_2, in_3, 0, 1 + n11, empty(0)) :|: st_2 >= 0, z = st_1, z' = in_2, z'' = st_2, z2 = 0, z3 = 1 + n11, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0, n11 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(st_1, in_2, st_2, in_3, 1 + h14 + t14, 1 + n12, empty(1 + h14 + fstsplit(n12, t14))) :|: z = st_1, z' = in_2, z2 = 1 + h14 + t14, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, n12 >= 0, st_2 >= 0, h14 >= 0, z'' = st_2, z3 = 1 + n12, st_1 >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, in_3, sndsplit(n14, t15), 1 + n14) :|: z = st_1, z' = in_2, z2 = 1 + h15 + t15, h15 >= 0, z1 = in_3, n14 >= 0, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, t15 >= 0, z3 = 1 + n14, st_1 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, in_3, 0, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, in_3, 0, 1 + n13) :|: st_2 >= 0, z = st_1, z' = in_2, z'' = st_2, z2 = 0, z1 = in_3, n13 >= 0, z3 = 1 + n13, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, st_2, t17, sndsplit(m, app(map_f(0, h17), st_3)), m) :|: t17 >= 0, z = st_1, z' = in_2, st_3 >= 0, h17 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, z1 = 1 + h17 + t17, st_1 >= 0, z3 = m, m >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, t17, sndsplit(m, app(map_f(0, 0), st_3)), m) :|: t17 >= 0, z = st_1, z' = in_2, st_3 >= 0, h17 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, z1 = 1 + h17 + t17, st_1 >= 0, z3 = m, m >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, 0, sndsplit(m, app(map_f(0, h18), st_3)), m) :|: h18 >= 0, z = st_1, z' = in_2, st_3 >= 0, z1 = 1 + h18 + t18, z4 = 1, in_2 >= 0, st_2 >= 0, t18 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, 0, sndsplit(m, app(map_f(0, 0), st_3)), m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, t20, st_3, m) :|: z1 = 1 + h20 + t20, z = st_1, t20 >= 0, z' = in_2, st_3 >= 0, z4 = 2, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, h20 >= 0, m >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, 0, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(n, m) :|: n >= 0, z' = 1 + m, z = 1 + n, m >= 0 leq(z, z') -{ 1 }-> 2 :|: z' = m, z = 0, m >= 0 leq(z, z') -{ 1 }-> 1 :|: n >= 0, z = 1 + n, z' = 0 map_f(z, z') -{ 2 }-> app(1 + pid + h, app(1 + pid + h', map_f(pid, t'))) :|: z = pid, t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), pid >= 0 map_f(z, z') -{ 2 }-> app(1 + pid + h, 0) :|: z = pid, h >= 0, z' = 1 + h + 0, pid >= 0 map_f(z, z') -{ 1 }-> app(1 + pid + h, 0) :|: z' = 1 + h + t, z = pid, h >= 0, t >= 0, pid >= 0 map_f(z, z') -{ 1 }-> 0 :|: z = pid, pid >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(0, 0))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(st_1, in_2, st_2, 1 + h19 + t19, st_3, m, empty(map_f(0, h19))) :|: z = st_1, z' = in_2, st_3 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, 0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(st_1, in_2, st_2, in_3, 0, m, leq(m, 0)) :|: st_2 >= 0, z = st_1, z' = in_2, z'' = st_2, z2 = 0, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(st_1, in_2, st_2, in_3, 1 + h13 + t13, m, leq(m, 1 + length(t13))) :|: z = st_1, z' = in_2, z1 = in_3, in_3 >= 0, z2 = 1 + h13 + t13, in_2 >= 0, st_2 >= 0, t13 >= 0, z'' = st_2, h13 >= 0, st_1 >= 0, z3 = m, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(1, 0))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(st_1, 1 + h11 + t11, st_2, in_3, st_3, m, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z = st_1, st_3 >= 0, z1 = in_3, in_3 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, t11 >= 0, st_1 >= 0, z3 = m, h11 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, 0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(st_1, in_2, 0, in_3, st_3, m, leq(m, 0)) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(st_1, in_2, 1 + h3 + t3, in_3, st_3, m, leq(m, 1 + length(t3))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, in_2 >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(st_1, in_2, st_2, in_3, st_3, 0, empty(0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, in_2 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, in_2, st_2, in_3, st_3, 1 + n', empty(0)) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z3 = 1 + n', z'' = st_2, n' >= 0, z2 = st_3, z1 = in_3, in_3 >= 0, z = 0, in_2 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', in_2, st_2, in_3, st_3, 1 + n'', empty(1 + h'' + fstsplit(n'', t''))) :|: h'' >= 0, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, t'' >= 0, z3 = 1 + n'', z = 1 + h'' + t'', z2 = st_3, n'' >= 0 sndsplit(z, z') -{ 1 }-> x :|: z' = x, x >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(n, t) :|: z' = 1 + h + t, n >= 0, h >= 0, t >= 0, z = 1 + n sndsplit(z, z') -{ 1 }-> 0 :|: n >= 0, z = 1 + n, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ---------------------------------------- (15) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 empty(z) -{ 1 }-> 2 :|: z = 0 ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> x :|: z' = x, x >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 app(z, z') -{ 1 }-> 1 + h + app(t, x) :|: z = 1 + h + t, z' = x, x >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 fstsplit(z, z') -{ 1 }-> 0 :|: z' = x, x >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: n >= 0, z = 1 + n, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(n, t) :|: z' = 1 + h + t, n >= 0, h >= 0, t >= 0, z = 1 + n head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, 1 + 0 + in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, 1 + 0 + in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(n2, t1), 1 + 0 + in_2, st_2, in_3, st_3, 1 + n2) :|: z' = in_2, st_3 >= 0, z3 = 1 + n2, z1 = in_3, n2 >= 0, t1 >= 0, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z = 1 + h1 + t1, h1 >= 0, z'' = st_2, z2 = st_3 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(n2, t1), 1 + (1 + h1 + fstsplit(n2, t1)) + in_2, st_2, in_3, st_3, 1 + n2) :|: z' = in_2, st_3 >= 0, z3 = 1 + n2, z1 = in_3, n2 >= 0, t1 >= 0, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z = 1 + h1 + t1, h1 >= 0, z'' = st_2, z2 = st_3 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 1 + n1) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z3 = 1 + n1, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, n1 >= 0, z = 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 1 + n1) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z3 = 1 + n1, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, n1 >= 0, z = 0, z4 = 1, in_2 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + in_2, st_2, in_3, st_3, 1 + n3) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 1 + n3, z2 = st_3, z1 = in_3, in_3 >= 0, z = 0, z4 = 1, in_2 >= 0, n3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(n4, t2)) + in_2, st_2, in_3, st_3, 1 + n4) :|: n4 >= 0, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, h2 >= 0, in_2 >= 0, t2 >= 0, z = 1 + h2 + t2, st_2 >= 0, z'' = st_2, z2 = st_3, z3 = 1 + n4 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(1, 0), st_2)))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(st_1, 1 + h7 + t7, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(1, h7), st_2)))) :|: z = st_1, st_3 >= 0, z' = 1 + h7 + t7, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, t7 >= 0, h7 >= 0, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(st_1, in_2, st_2, in_3, st_3, m, 2) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(st_1, in_2, st_2, in_3, st_3, m, 0) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(st_1, in_2, st_2, in_3, st_3, 0, 2) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(st_1, in_2, st_2, in_3, st_3, 0, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(st_1, in_2, 0, in_3, st_3, 1 + n5, 2) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, z2 = st_3, z3 = 1 + n5, z1 = in_3, z4 = 2, n5 >= 0, in_3 >= 0, st_1 >= 0, in_2 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(st_1, in_2, 0, in_3, st_3, 1 + n5, 0) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, z2 = st_3, z3 = 1 + n5, z1 = in_3, z4 = 2, n5 >= 0, in_3 >= 0, st_1 >= 0, in_2 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(st_1, in_2, 1 + h4 + t4, in_3, st_3, 1 + n6, empty(1 + h4 + fstsplit(n6, t4))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, t4 >= 0, in_3 >= 0, in_2 >= 0, h4 >= 0, n6 >= 0, z2 = st_3, z3 = 1 + n6, st_1 >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, st_2, 1 + 0 + in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, 1 + 0 + in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, sndsplit(n8, t5), 1 + 0 + in_3, st_3, 1 + n8) :|: z = st_1, h5 >= 0, z' = in_2, st_3 >= 0, z1 = in_3, t5 >= 0, in_3 >= 0, z'' = 1 + h5 + t5, z4 = 1, in_2 >= 0, n8 >= 0, z2 = st_3, st_1 >= 0, z3 = 1 + n8 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, sndsplit(n8, t5), 1 + (1 + h5 + fstsplit(n8, t5)) + in_3, st_3, 1 + n8) :|: z = st_1, h5 >= 0, z' = in_2, st_3 >= 0, z1 = in_3, t5 >= 0, in_3 >= 0, z'' = 1 + h5 + t5, z4 = 1, in_2 >= 0, n8 >= 0, z2 = st_3, st_1 >= 0, z3 = 1 + n8 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 1 + n7) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, n7 >= 0, z2 = st_3, z1 = in_3, z3 = 1 + n7, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 1 + n7) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, n7 >= 0, z2 = st_3, z1 = in_3, z3 = 1 + n7, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + 0 + in_3, st_3, 1 + n9) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, z2 = st_3, z1 = in_3, n9 >= 0, in_3 >= 0, z3 = 1 + n9, st_1 >= 0, z4 = 1, in_2 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, 0, 1 + (1 + h6 + fstsplit(n10, t6)) + in_3, st_3, 1 + n10) :|: z = st_1, z' = in_2, st_3 >= 0, t6 >= 0, z1 = in_3, in_3 >= 0, n10 >= 0, z4 = 1, in_2 >= 0, h6 >= 0, z'' = 1 + h6 + t6, z3 = 1 + n10, z2 = st_3, st_1 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, h8), st_2)), 1 + fstsplit(m, app(map_f(1, h8), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, h8), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, h8), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, t8, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, z' = 1 + h8 + t8, st_3 >= 0, h8 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, z'' = st_2, z2 = st_3, t8 >= 0, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, h9), st_2)), 1 + fstsplit(m, app(map_f(1, h9), st_2)) + in_3, st_3, m) :|: z = st_1, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, h9 >= 0, z'' = st_2, z2 = st_3, t9 >= 0, st_1 >= 0, z3 = m, z' = 1 + h9 + t9, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, h9), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, h9 >= 0, z'' = st_2, z2 = st_3, t9 >= 0, st_1 >= 0, z3 = m, z' = 1 + h9 + t9, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, h10), st_2)) + in_3, st_3, m) :|: z' = 1 + h10 + t10, z = st_1, h10 >= 0, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, st_2 >= 0, t10 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, 0, sndsplit(m, app(map_f(1, 0), st_2)), 1 + fstsplit(m, app(map_f(1, 0), st_2)) + in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, t12, st_2, in_3, st_3, m) :|: z' = 1 + h12 + t12, z = st_1, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, h12 >= 0, st_1 >= 0, t12 >= 0, z3 = m, m >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, 0, st_2, in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(0, 0), st_3)))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(st_1, in_2, st_2, 1 + h16 + t16, st_3, m, empty(fstsplit(m, app(map_f(0, h16), st_3)))) :|: z = st_1, z' = in_2, st_3 >= 0, h16 >= 0, z4 = 1, in_2 >= 0, z1 = 1 + h16 + t16, st_2 >= 0, t16 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(st_1, in_2, st_2, in_3, st_3, m, 2) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(st_1, in_2, st_2, in_3, st_3, m, 0) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(st_1, in_2, st_2, in_3, st_3, 0, 2) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(st_1, in_2, st_2, in_3, st_3, 0, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(st_1, in_2, st_2, in_3, 0, 1 + n11, 2) :|: st_2 >= 0, z = st_1, z' = in_2, z'' = st_2, z2 = 0, z3 = 1 + n11, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0, n11 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(st_1, in_2, st_2, in_3, 0, 1 + n11, 0) :|: st_2 >= 0, z = st_1, z' = in_2, z'' = st_2, z2 = 0, z3 = 1 + n11, z1 = in_3, z4 = 2, in_3 >= 0, st_1 >= 0, in_2 >= 0, n11 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(st_1, in_2, st_2, in_3, 1 + h14 + t14, 1 + n12, empty(1 + h14 + fstsplit(n12, t14))) :|: z = st_1, z' = in_2, z2 = 1 + h14 + t14, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, n12 >= 0, st_2 >= 0, h14 >= 0, z'' = st_2, z3 = 1 + n12, st_1 >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, in_3, st_3, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, in_3, sndsplit(n14, t15), 1 + n14) :|: z = st_1, z' = in_2, z2 = 1 + h15 + t15, h15 >= 0, z1 = in_3, n14 >= 0, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, t15 >= 0, z3 = 1 + n14, st_1 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, in_3, 0, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, in_3, 0, 1 + n13) :|: st_2 >= 0, z = st_1, z' = in_2, z'' = st_2, z2 = 0, z1 = in_3, n13 >= 0, z3 = 1 + n13, in_3 >= 0, st_1 >= 0, z4 = 1, in_2 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(st_1, in_2, st_2, t17, sndsplit(m, app(map_f(0, h17), st_3)), m) :|: t17 >= 0, z = st_1, z' = in_2, st_3 >= 0, h17 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, z1 = 1 + h17 + t17, st_1 >= 0, z3 = m, m >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, t17, sndsplit(m, app(map_f(0, 0), st_3)), m) :|: t17 >= 0, z = st_1, z' = in_2, st_3 >= 0, h17 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, z1 = 1 + h17 + t17, st_1 >= 0, z3 = m, m >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, 0, sndsplit(m, app(map_f(0, h18), st_3)), m) :|: h18 >= 0, z = st_1, z' = in_2, st_3 >= 0, z1 = 1 + h18 + t18, z4 = 1, in_2 >= 0, st_2 >= 0, t18 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, 0, sndsplit(m, app(map_f(0, 0), st_3)), m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(st_1, in_2, st_2, t20, st_3, m) :|: z1 = 1 + h20 + t20, z = st_1, t20 >= 0, z' = in_2, st_3 >= 0, z4 = 2, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, h20 >= 0, m >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, 0, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(n, m) :|: n >= 0, z' = 1 + m, z = 1 + n, m >= 0 leq(z, z') -{ 1 }-> 2 :|: z' = m, z = 0, m >= 0 leq(z, z') -{ 1 }-> 1 :|: n >= 0, z = 1 + n, z' = 0 map_f(z, z') -{ 2 }-> app(1 + pid + h, app(1 + pid + h', map_f(pid, t'))) :|: z = pid, t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), pid >= 0 map_f(z, z') -{ 2 }-> app(1 + pid + h, 0) :|: z = pid, h >= 0, z' = 1 + h + 0, pid >= 0 map_f(z, z') -{ 1 }-> app(1 + pid + h, 0) :|: z' = 1 + h + t, z = pid, h >= 0, t >= 0, pid >= 0 map_f(z, z') -{ 1 }-> 0 :|: z = pid, pid >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(0, 0))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(st_1, in_2, st_2, 1 + h19 + t19, st_3, m, empty(map_f(0, h19))) :|: z = st_1, z' = in_2, st_3 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, 0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(st_1, in_2, st_2, in_3, 0, m, leq(m, 0)) :|: st_2 >= 0, z = st_1, z' = in_2, z'' = st_2, z2 = 0, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(st_1, in_2, st_2, in_3, 1 + h13 + t13, m, leq(m, 1 + length(t13))) :|: z = st_1, z' = in_2, z1 = in_3, in_3 >= 0, z2 = 1 + h13 + t13, in_2 >= 0, st_2 >= 0, t13 >= 0, z'' = st_2, h13 >= 0, st_1 >= 0, z3 = m, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(1, 0))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(st_1, 1 + h11 + t11, st_2, in_3, st_3, m, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z = st_1, st_3 >= 0, z1 = in_3, in_3 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, t11 >= 0, st_1 >= 0, z3 = m, h11 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, 0)) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(st_1, in_2, 0, in_3, st_3, m, leq(m, 0)) :|: z'' = 0, z = st_1, z' = in_2, st_3 >= 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(st_1, in_2, 1 + h3 + t3, in_3, st_3, m, leq(m, 1 + length(t3))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, in_2 >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(st_1, in_2, st_2, in_3, st_3, m, 2) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(st_1, in_2, st_2, in_3, st_3, m, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(st_1, in_2, st_2, in_3, st_3, 0, 2) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, in_2 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(st_1, in_2, st_2, in_3, st_3, 0, 0) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z3 = 0, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, in_2 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, in_2, st_2, in_3, st_3, 1 + n', 2) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z3 = 1 + n', z'' = st_2, n' >= 0, z2 = st_3, z1 = in_3, in_3 >= 0, z = 0, in_2 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, in_2, st_2, in_3, st_3, 1 + n', 0) :|: st_2 >= 0, z' = in_2, st_3 >= 0, z3 = 1 + n', z'' = st_2, n' >= 0, z2 = st_3, z1 = in_3, in_3 >= 0, z = 0, in_2 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', in_2, st_2, in_3, st_3, 1 + n'', empty(1 + h'' + fstsplit(n'', t''))) :|: h'' >= 0, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, t'' >= 0, z3 = 1 + n'', z = 1 + h'' + t'', z2 = st_3, n'' >= 0 sndsplit(z, z') -{ 1 }-> x :|: z' = x, x >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(n, t) :|: z' = 1 + h + t, n >= 0, h >= 0, t >= 0, z = 1 + n sndsplit(z, z') -{ 1 }-> 0 :|: n >= 0, z = 1 + n, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ---------------------------------------- (17) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 ---------------------------------------- (19) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { empty } { leq } { length } { tail } { fstsplit } { sndsplit } { head } { app } { map_f } { if_5, if_4, if_2, if_3, if_8, if_1, if_6, ring, if_9, if_7 } ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {empty}, {leq}, {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} ---------------------------------------- (21) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {empty}, {leq}, {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: empty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {empty}, {leq}, {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: ?, size: O(1) [2] ---------------------------------------- (25) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: empty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {leq}, {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (27) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {leq}, {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: leq after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {leq}, {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: ?, size: O(1) [2] ---------------------------------------- (31) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: leq after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 0, z3, leq(z3, 0)) :|: z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(z, z', z'', z1, z2, z3, leq(z3, 0)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 0, z1, z2, z3, leq(z3, 0)) :|: z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] ---------------------------------------- (33) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: length after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {length}, {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: ?, size: O(n^1) [z] ---------------------------------------- (37) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: length after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, leq(z3, 1 + length(t13))) :|: z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, leq(z3, 1 + length(t3))) :|: z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] ---------------------------------------- (39) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] ---------------------------------------- (41) 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 ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: ?, size: O(n^1) [z] ---------------------------------------- (43) 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 ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (45) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: fstsplit after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {fstsplit}, {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: ?, size: O(n^1) [z'] ---------------------------------------- (49) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: fstsplit after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + fstsplit(z3 - 1, t1)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + (1 + h2 + fstsplit(z3 - 1, t2)) + z', z'', z1, z2, 1 + (z3 - 1)) :|: z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), empty(1 + h4 + fstsplit(z3 - 1, t4))) :|: z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + fstsplit(z3 - 1, t5)) + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + (1 + h6 + fstsplit(z3 - 1, t6)) + z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), empty(1 + h14 + fstsplit(z3 - 1, t14))) :|: z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), empty(1 + h'' + fstsplit(z3 - 1, t''))) :|: h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] ---------------------------------------- (51) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 5 + t1 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 5 + t5 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: sndsplit after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 5 + t1 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 5 + t5 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {sndsplit}, {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: ?, size: O(n^1) [z'] ---------------------------------------- (55) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: sndsplit after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z' ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(sndsplit(z3 - 1, t1), 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 5 + t1 }-> ring(sndsplit(z3 - 1, t1), 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 5 + t5 }-> ring(z, z', sndsplit(z3 - 1, t5), 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, sndsplit(z3 - 1, t15), 1 + (z3 - 1)) :|: z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(z - 1, t) :|: z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] ---------------------------------------- (57) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: head after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: ?, size: O(n^1) [z] ---------------------------------------- (61) 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 ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (63) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: app after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {app}, {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] app: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (67) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: app after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 1 }-> 1 + h + app(t, z') :|: z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> app(1 + z + h, 0) :|: z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + (z' - 1), 0) :|: z' - 1 >= 0, z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] app: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (69) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 2 + t }-> 1 + h + s25 :|: s25 >= 0, s25 <= t + z', z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 3 + z + z' }-> s26 :|: s26 >= 0, s26 <= 1 + z + (z' - 1) + 0, z' - 1 >= 0, z >= 0 map_f(z, z') -{ 3 + h + z }-> s27 :|: s27 >= 0, s27 <= 1 + z + h + 0, z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] app: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: map_f after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 3*z + 2*z*z' + z' + z'^2 ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 2 + t }-> 1 + h + s25 :|: s25 >= 0, s25 <= t + z', z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 3 + z + z' }-> s26 :|: s26 >= 0, s26 <= 1 + z + (z' - 1) + 0, z' - 1 >= 0, z >= 0 map_f(z, z') -{ 3 + h + z }-> s27 :|: s27 >= 0, s27 <= 1 + z + h + 0, z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {map_f}, {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] app: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] map_f: runtime: ?, size: O(n^2) [3*z + 2*z*z' + z' + z'^2] ---------------------------------------- (73) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: map_f after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 12 + 10*z + 3*z*z' + 2*z^2 + 7*z' + z'^2 ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 2 + t }-> 1 + h + s25 :|: s25 >= 0, s25 <= t + z', z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, 0), z'')))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(1, h7), z'')))) :|: z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 4 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, h8), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h8), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t8, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, h9), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, h9), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, h10), z'')) + z1, z2, z3) :|: z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, sndsplit(z3, app(map_f(1, 0), z'')), 1 + fstsplit(z3, app(map_f(1, 0), z'')) + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(z, z', z'', z1, z2, z3, empty(fstsplit(z3, app(map_f(0, 0), z2)))) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, empty(fstsplit(z3, app(map_f(0, h16), z2)))) :|: z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, h17), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t17, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, h18), z2)), z3) :|: h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, sndsplit(z3, app(map_f(0, 0), z2)), z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 3 + z + z' }-> s26 :|: s26 >= 0, s26 <= 1 + z + (z' - 1) + 0, z' - 1 >= 0, z >= 0 map_f(z, z') -{ 3 + h + z }-> s27 :|: s27 >= 0, s27 <= 1 + z + h + 0, z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 2 }-> app(1 + z + h, app(1 + z + h', map_f(z, t'))) :|: t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(z, z', z'', z1, z2, z3, empty(map_f(0, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, empty(map_f(0, h19))) :|: z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(z, z', z'', z1, z2, z3, empty(map_f(1, 0))) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, empty(map_f(1, h11))) :|: z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] app: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] map_f: runtime: O(n^2) [12 + 10*z + 3*z*z' + 2*z^2 + 7*z' + z'^2], size: O(n^2) [3*z + 2*z*z' + z' + z'^2] ---------------------------------------- (75) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 2 + t }-> 1 + h + s25 :|: s25 >= 0, s25 <= t + z', z = 1 + h + t, z' >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: z >= 0 fstsplit(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 fstsplit(z, z') -{ 3 + t }-> 1 + h + s8 :|: s8 >= 0, s8 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: z >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t1 }-> ring(s20, 1 + (1 + h1 + s9) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s20 >= 0, s20 <= t1, s9 >= 0, s9 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t1 }-> ring(s21, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: s21 >= 0, s21 <= t1, z2 >= 0, z3 - 1 >= 0, t1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z = 1 + h1 + t1, h1 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(0, 1 + 0 + z', z'', z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(0, 1 + 0 + z', z'', z1, z2, 1 + (z3 - 1)) :|: z'' >= 0, z2 >= 0, z1 >= 0, z3 - 1 >= 0, z = 0, z4 = 1, z' >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 4 + t2 }-> ring(0, 1 + (1 + h2 + s10) + z', z'', z1, z2, 1 + (z3 - 1)) :|: s10 >= 0, s10 <= t2, z3 - 1 >= 0, z2 >= 0, z1 >= 0, z4 = 1, h2 >= 0, z' >= 0, t2 >= 0, z = 1 + h2 + t2, z'' >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 29 + s95 + s96 }-> if_4(z, z', z'', z1, z2, z3, s98) :|: s95 >= 0, s95 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s96 >= 0, s96 <= s95 + z'', s97 >= 0, s97 <= s96, s98 >= 0, s98 <= 2, z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 30 + 10*h7 + h7^2 + s91 + s92 }-> if_4(z, 1 + h7 + t7, z'', z1, z2, z3, s94) :|: s91 >= 0, s91 <= 2 * (h7 * 1) + 3 * 1 + h7 * h7 + h7, s92 >= 0, s92 <= s91 + z'', s93 >= 0, s93 <= s92, s94 >= 0, s94 <= 2, z2 >= 0, z' = 1 + h7 + t7, z1 >= 0, z4 = 1, z'' >= 0, t7 >= 0, h7 >= 0, z >= 0, z3 >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 2) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_3(z, z', 0, z1, z2, 1 + (z3 - 1), 0) :|: z'' = 0, z2 >= 0, z4 = 2, z3 - 1 >= 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_2(z, z', z'', z1, z2, z3, z4) -{ 5 + t4 }-> if_3(z, z', 1 + h4 + t4, z1, z2, 1 + (z3 - 1), s16) :|: s15 >= 0, s15 <= t4, s16 >= 0, s16 <= 2, z2 >= 0, z4 = 2, t4 >= 0, z1 >= 0, z' >= 0, h4 >= 0, z3 - 1 >= 0, z >= 0, z'' = 1 + h4 + t4 if_3(z, z', z'', z1, z2, z3, z4) -{ 7 + 2*t5 }-> ring(z, z', s22, 1 + (1 + h5 + s11) + z1, z2, 1 + (z3 - 1)) :|: s22 >= 0, s22 <= t5, s11 >= 0, s11 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t5 }-> ring(z, z', s23, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: s23 >= 0, s23 <= t5, h5 >= 0, z2 >= 0, t5 >= 0, z1 >= 0, z'' = 1 + h5 + t5, z4 = 1, z' >= 0, z3 - 1 >= 0, z >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', 0, 1 + 0 + z1, z2, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 3 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', 0, 1 + 0 + z1, z2, 1 + (z3 - 1)) :|: z'' = 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 4 + t6 }-> ring(z, z', 0, 1 + (1 + h6 + s12) + z1, z2, 1 + (z3 - 1)) :|: s12 >= 0, s12 <= t6, z2 >= 0, t6 >= 0, z1 >= 0, z3 - 1 >= 0, z4 = 1, z' >= 0, h6 >= 0, z'' = 1 + h6 + t6, z >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 58 + 20*h8 + 2*h8^2 + s31 + s32 + s34 + s35 }-> ring(z, t8, s33, 1 + s36 + z1, z2, z3) :|: s31 >= 0, s31 <= 2 * (h8 * 1) + 3 * 1 + h8 * h8 + h8, s32 >= 0, s32 <= s31 + z'', s33 >= 0, s33 <= s32, s34 >= 0, s34 <= 2 * (h8 * 1) + 3 * 1 + h8 * h8 + h8, s35 >= 0, s35 <= s34 + z'', s36 >= 0, s36 <= s35, z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 57 + 10*h8 + h8^2 + s37 + s38 + s40 + s41 }-> ring(z, t8, s39, 1 + s42 + z1, z2, z3) :|: s37 >= 0, s37 <= 2 * (h8 * 1) + 3 * 1 + h8 * h8 + h8, s38 >= 0, s38 <= s37 + z'', s39 >= 0, s39 <= s38, s40 >= 0, s40 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s41 >= 0, s41 <= s40 + z'', s42 >= 0, s42 <= s41, z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 57 + 10*h8 + h8^2 + s43 + s44 + s46 + s47 }-> ring(z, t8, s45, 1 + s48 + z1, z2, z3) :|: s43 >= 0, s43 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s44 >= 0, s44 <= s43 + z'', s45 >= 0, s45 <= s44, s46 >= 0, s46 <= 2 * (h8 * 1) + 3 * 1 + h8 * h8 + h8, s47 >= 0, s47 <= s46 + z'', s48 >= 0, s48 <= s47, z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 56 + s49 + s50 + s52 + s53 }-> ring(z, t8, s51, 1 + s54 + z1, z2, z3) :|: s49 >= 0, s49 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s50 >= 0, s50 <= s49 + z'', s51 >= 0, s51 <= s50, s52 >= 0, s52 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s53 >= 0, s53 <= s52 + z'', s54 >= 0, s54 <= s53, z' = 1 + h8 + t8, z2 >= 0, h8 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t8 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 57 + 20*h9 + 2*h9^2 + s55 + s56 + s58 + s59 }-> ring(z, 0, s57, 1 + s60 + z1, z2, z3) :|: s55 >= 0, s55 <= 2 * (h9 * 1) + 3 * 1 + h9 * h9 + h9, s56 >= 0, s56 <= s55 + z'', s57 >= 0, s57 <= s56, s58 >= 0, s58 <= 2 * (h9 * 1) + 3 * 1 + h9 * h9 + h9, s59 >= 0, s59 <= s58 + z'', s60 >= 0, s60 <= s59, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 56 + 10*h9 + h9^2 + s61 + s62 + s64 + s65 }-> ring(z, 0, s63, 1 + s66 + z1, z2, z3) :|: s61 >= 0, s61 <= 2 * (h9 * 1) + 3 * 1 + h9 * h9 + h9, s62 >= 0, s62 <= s61 + z'', s63 >= 0, s63 <= s62, s64 >= 0, s64 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s65 >= 0, s65 <= s64 + z'', s66 >= 0, s66 <= s65, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, h9 >= 0, t9 >= 0, z >= 0, z' = 1 + h9 + t9, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 56 + 10*h10 + h10^2 + s67 + s68 + s70 + s71 }-> ring(z, 0, s69, 1 + s72 + z1, z2, z3) :|: s67 >= 0, s67 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s68 >= 0, s68 <= s67 + z'', s69 >= 0, s69 <= s68, s70 >= 0, s70 <= 2 * (h10 * 1) + 3 * 1 + h10 * h10 + h10, s71 >= 0, s71 <= s70 + z'', s72 >= 0, s72 <= s71, z' = 1 + h10 + t10, h10 >= 0, z2 >= 0, z1 >= 0, z4 = 1, z'' >= 0, t10 >= 0, z >= 0, z3 >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 55 + s73 + s74 + s76 + s77 }-> ring(z, 0, s75, 1 + s78 + z1, z2, z3) :|: s73 >= 0, s73 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s74 >= 0, s74 <= s73 + z'', s75 >= 0, s75 <= s74, s76 >= 0, s76 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s77 >= 0, s77 <= s76 + z'', s78 >= 0, s78 <= s77, z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, t12, z'', z1, z2, z3) :|: z' = 1 + h12 + t12, z2 >= 0, z4 = 2, z1 >= 0, z'' >= 0, h12 >= 0, z >= 0, t12 >= 0, z3 >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, 0, z'', z1, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 17 + s107 + s108 }-> if_8(z, z', z'', z1, z2, z3, s110) :|: s107 >= 0, s107 <= 2 * (0 * 0) + 3 * 0 + 0 * 0 + 0, s108 >= 0, s108 <= s107 + z2, s109 >= 0, s109 <= s108, s110 >= 0, s110 <= 2, z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 18 + 7*h16 + h16^2 + s103 + s104 }-> if_8(z, z', z'', 1 + h16 + t16, z2, z3, s106) :|: s103 >= 0, s103 <= 2 * (h16 * 0) + 3 * 0 + h16 * h16 + h16, s104 >= 0, s104 <= s103 + z2, s105 >= 0, s105 <= s104, s106 >= 0, s106 <= 2, z2 >= 0, h16 >= 0, z4 = 1, z' >= 0, z1 = 1 + h16 + t16, z'' >= 0, t16 >= 0, z >= 0, z3 >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, z3, 2) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(z, z', z'', z1, z2, z3, 0) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 3 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, 0 = 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 2 }-> if_7(z, z', z'', z1, 0, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 = 0, z4 = 2, z1 >= 0, z >= 0, z' >= 0, z3 - 1 >= 0, v0 >= 0, 0 = v0 if_6(z, z', z'', z1, z2, z3, z4) -{ 5 + t14 }-> if_7(z, z', z'', z1, 1 + h14 + t14, 1 + (z3 - 1), s18) :|: s17 >= 0, s17 <= t14, s18 >= 0, s18 <= 2, z2 = 1 + h14 + t14, z4 = 2, z1 >= 0, z' >= 0, z3 - 1 >= 0, z'' >= 0, h14 >= 0, z >= 0, t14 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 4 + t15 }-> ring(z, z', z'', z1, s24, 1 + (z3 - 1)) :|: s24 >= 0, s24 <= t15, z2 = 1 + h15 + t15, h15 >= 0, z3 - 1 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, t15 >= 0, z >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, z2, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', z1, 0, z3) :|: z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', z1, 0, 1 + (z3 - 1)) :|: z'' >= 0, z2 = 0, z3 - 1 >= 0, z1 >= 0, z >= 0, z4 = 1, z' >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 18 + 7*h17 + h17^2 + s79 + s80 }-> ring(z, z', z'', t17, s81, z3) :|: s79 >= 0, s79 <= 2 * (h17 * 0) + 3 * 0 + h17 * h17 + h17, s80 >= 0, s80 <= s79 + z2, s81 >= 0, s81 <= s80, t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 17 + s82 + s83 }-> ring(z, z', z'', t17, s84, z3) :|: s82 >= 0, s82 <= 2 * (0 * 0) + 3 * 0 + 0 * 0 + 0, s83 >= 0, s83 <= s82 + z2, s84 >= 0, s84 <= s83, t17 >= 0, z2 >= 0, h17 >= 0, z4 = 1, z' >= 0, z'' >= 0, z1 = 1 + h17 + t17, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 17 + 7*h18 + h18^2 + s85 + s86 }-> ring(z, z', z'', 0, s87, z3) :|: s85 >= 0, s85 <= 2 * (h18 * 0) + 3 * 0 + h18 * h18 + h18, s86 >= 0, s86 <= s85 + z2, s87 >= 0, s87 <= s86, h18 >= 0, z2 >= 0, z1 = 1 + h18 + t18, z4 = 1, z' >= 0, z'' >= 0, t18 >= 0, z >= 0, z3 >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 16 + s88 + s89 }-> ring(z, z', z'', 0, s90, z3) :|: s88 >= 0, s88 <= 2 * (0 * 0) + 3 * 0 + 0 * 0 + 0, s89 >= 0, s89 <= s88 + z2, s90 >= 0, s90 <= s89, z2 >= 0, z1 >= 0, z4 = 1, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 2 }-> ring(z, z', z'', t20, z2, z3) :|: z1 = 1 + h20 + t20, t20 >= 0, z2 >= 0, z4 = 2, z' >= 0, z'' >= 0, z >= 0, h20 >= 0, z3 >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(z, z', z'', 0, z2, z3) :|: z2 >= 0, z4 = 2, z1 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: z >= 0 length(z) -{ 2 + t }-> 1 + s3 :|: s3 >= 0, s3 <= t, z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 2 + z' }-> s :|: s >= 0, s <= 2, z - 1 >= 0, z' - 1 >= 0 leq(z, z') -{ 1 }-> 2 :|: z = 0, z' >= 0 leq(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0 map_f(z, z') -{ 3 + z + z' }-> s26 :|: s26 >= 0, s26 <= 1 + z + (z' - 1) + 0, z' - 1 >= 0, z >= 0 map_f(z, z') -{ 3 + h + z }-> s27 :|: s27 >= 0, s27 <= 1 + z + h + 0, z' = 1 + h + t, h >= 0, t >= 0, z >= 0 map_f(z, z') -{ 18 + h + h' + 7*t' + 3*t'*z + t'^2 + 12*z + 2*z^2 }-> s30 :|: s28 >= 0, s28 <= 2 * (t' * z) + 3 * z + t' * t' + t', s29 >= 0, s29 <= 1 + z + h' + s28, s30 >= 0, s30 <= 1 + z + h + s29, t' >= 0, h' >= 0, h >= 0, z' = 1 + h + (1 + h' + t'), z >= 0 map_f(z, z') -{ 1 }-> 0 :|: z >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ring(z, z', z'', z1, z2, z3) -{ 14 }-> if_9(z, z', z'', z1, z2, z3, s114) :|: s113 >= 0, s113 <= 2 * (0 * 0) + 3 * 0 + 0 * 0 + 0, s114 >= 0, s114 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 15 + 7*h19 + h19^2 }-> if_9(z, z', z'', 1 + h19 + t19, z2, z3, s112) :|: s111 >= 0, s111 <= 2 * (h19 * 0) + 3 * 0 + h19 * h19 + h19, s112 >= 0, s112 <= 2, z2 >= 0, t19 >= 0, z1 = 1 + h19 + t19, h19 >= 0, z' >= 0, z'' >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_6(z, z', z'', z1, z2, z3, s2) :|: s2 >= 0, s2 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_6(z, z', z'', z1, 0, z3, s1) :|: s1 >= 0, s1 <= 2, z'' >= 0, z2 = 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s6 + t13 }-> if_6(z, z', z'', z1, 1 + h13 + t13, z3, s7) :|: s6 >= 0, s6 <= t13, s7 >= 0, s7 <= 2, z1 >= 0, z2 = 1 + h13 + t13, z' >= 0, z'' >= 0, t13 >= 0, h13 >= 0, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 26 }-> if_5(z, z', z'', z1, z2, z3, s102) :|: s101 >= 0, s101 <= 2 * (0 * 1) + 3 * 1 + 0 * 0 + 0, s102 >= 0, s102 <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 27 + 10*h11 + h11^2 }-> if_5(z, 1 + h11 + t11, z'', z1, z2, z3, s100) :|: s99 >= 0, s99 <= 2 * (h11 * 1) + 3 * 1 + h11 * h11 + h11, s100 >= 0, s100 <= 2, z' = 1 + h11 + t11, z2 >= 0, z1 >= 0, z'' >= 0, t11 >= 0, z >= 0, h11 >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_2(z, z', z'', z1, z2, z3, s'') :|: s'' >= 0, s'' <= 2, z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 4 }-> if_2(z, z', 0, z1, z2, z3, s') :|: s' >= 0, s' <= 2, z'' = 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 6 + s4 + t3 }-> if_2(z, z', 1 + h3 + t3, z1, z2, z3, s5) :|: s4 >= 0, s4 <= t3, s5 >= 0, s5 <= 2, z2 >= 0, z1 >= 0, z' >= 0, t3 >= 0, h3 >= 0, z'' = 1 + h3 + t3, z >= 0, z3 >= 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, z3, 2) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(z, z', z'', z1, z2, z3, 0) :|: z'' >= 0, z2 >= 0, z1 >= 0, z >= 0, z' >= 0, z3 >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(z, z', z'', z1, z2, 0, 2) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(z, z', z'', z1, z2, 0, 0) :|: z'' >= 0, z2 >= 0, z3 = 0, z1 >= 0, z >= 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 3 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 2) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, 0 = 0 ring(z, z', z'', z1, z2, z3) -{ 2 }-> if_1(0, z', z'', z1, z2, 1 + (z3 - 1), 0) :|: z'' >= 0, z2 >= 0, z3 - 1 >= 0, z1 >= 0, z = 0, z' >= 0, v0 >= 0, 0 = v0 ring(z, z', z'', z1, z2, z3) -{ 5 + t'' }-> if_1(1 + h'' + t'', z', z'', z1, z2, 1 + (z3 - 1), s14) :|: s13 >= 0, s13 <= t'', s14 >= 0, s14 <= 2, h'' >= 0, z2 >= 0, z1 >= 0, z' >= 0, z'' >= 0, t'' >= 0, z = 1 + h'' + t'', z3 - 1 >= 0 sndsplit(z, z') -{ 3 + t }-> s19 :|: s19 >= 0, s19 <= t, z' = 1 + h + t, z - 1 >= 0, h >= 0, t >= 0 sndsplit(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 sndsplit(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {if_5,if_4,if_2,if_3,if_8,if_1,if_6,ring,if_9,if_7} Previous analysis results are: empty: runtime: O(1) [1], size: O(1) [2] leq: runtime: O(n^1) [2 + z'], size: O(1) [2] length: runtime: O(n^1) [1 + z], size: O(n^1) [z] tail: runtime: O(1) [1], size: O(n^1) [z] fstsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] sndsplit: runtime: O(n^1) [2 + z'], size: O(n^1) [z'] head: runtime: O(1) [1], size: O(n^1) [z] app: runtime: O(n^1) [1 + z], size: O(n^1) [z + z'] map_f: runtime: O(n^2) [12 + 10*z + 3*z*z' + 2*z^2 + 7*z' + z'^2], size: O(n^2) [3*z + 2*z*z' + z' + z'^2] ---------------------------------------- (77) 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: fstsplit(v0, v1) -> null_fstsplit [0] sndsplit(v0, v1) -> null_sndsplit [0] empty(v0) -> null_empty [0] length(v0) -> null_length [0] app(v0, v1) -> null_app [0] map_f(v0, v1) -> null_map_f [0] head(v0) -> null_head [0] tail(v0) -> null_tail [0] if_1(v0, v1, v2, v3, v4, v5, v6) -> null_if_1 [0] if_3(v0, v1, v2, v3, v4, v5, v6) -> null_if_3 [0] if_4(v0, v1, v2, v3, v4, v5, v6) -> null_if_4 [0] if_5(v0, v1, v2, v3, v4, v5, v6) -> null_if_5 [0] if_7(v0, v1, v2, v3, v4, v5, v6) -> null_if_7 [0] if_8(v0, v1, v2, v3, v4, v5, v6) -> null_if_8 [0] if_9(v0, v1, v2, v3, v4, v5, v6) -> null_if_9 [0] leq(v0, v1) -> null_leq [0] if_2(v0, v1, v2, v3, v4, v5, v6) -> null_if_2 [0] if_6(v0, v1, v2, v3, v4, v5, v6) -> null_if_6 [0] And the following fresh constants: null_fstsplit, null_sndsplit, null_empty, null_length, null_app, null_map_f, null_head, null_tail, null_if_1, null_if_3, null_if_4, null_if_5, null_if_7, null_if_8, null_if_9, null_leq, null_if_2, null_if_6 ---------------------------------------- (78) 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: fstsplit(0, x) -> nil [1] fstsplit(s(n), nil) -> nil [1] fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) [1] sndsplit(0, x) -> x [1] sndsplit(s(n), nil) -> nil [1] sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) [1] empty(nil) -> true [1] empty(cons(h, t)) -> false [1] leq(0, m) -> true [1] leq(s(n), 0) -> false [1] leq(s(n), s(m)) -> leq(n, m) [1] length(nil) -> 0 [1] length(cons(h, t)) -> s(length(t)) [1] app(nil, x) -> x [1] app(cons(h, t), x) -> cons(h, app(t, x)) [1] map_f(pid, nil) -> nil [1] map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) [1] head(cons(h, t)) -> h [1] tail(cons(h, t)) -> t [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) [1] if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) [1] if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) [1] if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) [1] if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) [1] if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) [1] if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) [1] if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) [1] if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) [1] ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) [1] if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) [1] fstsplit(v0, v1) -> null_fstsplit [0] sndsplit(v0, v1) -> null_sndsplit [0] empty(v0) -> null_empty [0] length(v0) -> null_length [0] app(v0, v1) -> null_app [0] map_f(v0, v1) -> null_map_f [0] head(v0) -> null_head [0] tail(v0) -> null_tail [0] if_1(v0, v1, v2, v3, v4, v5, v6) -> null_if_1 [0] if_3(v0, v1, v2, v3, v4, v5, v6) -> null_if_3 [0] if_4(v0, v1, v2, v3, v4, v5, v6) -> null_if_4 [0] if_5(v0, v1, v2, v3, v4, v5, v6) -> null_if_5 [0] if_7(v0, v1, v2, v3, v4, v5, v6) -> null_if_7 [0] if_8(v0, v1, v2, v3, v4, v5, v6) -> null_if_8 [0] if_9(v0, v1, v2, v3, v4, v5, v6) -> null_if_9 [0] leq(v0, v1) -> null_leq [0] if_2(v0, v1, v2, v3, v4, v5, v6) -> null_if_2 [0] if_6(v0, v1, v2, v3, v4, v5, v6) -> null_if_6 [0] The TRS has the following type information: fstsplit :: 0:s:null_length -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail 0 :: 0:s:null_length nil :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail s :: 0:s:null_length -> 0:s:null_length cons :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail sndsplit :: 0:s:null_length -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail empty :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> true:false:null_empty:null_leq true :: true:false:null_empty:null_leq false :: true:false:null_empty:null_leq leq :: 0:s:null_length -> 0:s:null_length -> true:false:null_empty:null_leq length :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length app :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail map_f :: two:three -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail f :: two:three -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail head :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail tail :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail ring :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 if_1 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 if_2 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 if_3 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 if_4 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 two :: two:three if_5 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 if_6 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 if_7 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 if_8 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 three :: two:three if_9 :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail -> 0:s:null_length -> true:false:null_empty:null_leq -> null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_fstsplit :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail null_sndsplit :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail null_empty :: true:false:null_empty:null_leq null_length :: 0:s:null_length null_app :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail null_map_f :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail null_head :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail null_tail :: nil:cons:f:null_fstsplit:null_sndsplit:null_app:null_map_f:null_head:null_tail null_if_1 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_if_3 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_if_4 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_if_5 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_if_7 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_if_8 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_if_9 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_leq :: true:false:null_empty:null_leq null_if_2 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 null_if_6 :: null_if_1:null_if_3:null_if_4:null_if_5:null_if_7:null_if_8:null_if_9:null_if_2:null_if_6 Rewrite Strategy: INNERMOST ---------------------------------------- (79) 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 nil => 0 true => 2 false => 1 two => 1 three => 0 null_fstsplit => 0 null_sndsplit => 0 null_empty => 0 null_length => 0 null_app => 0 null_map_f => 0 null_head => 0 null_tail => 0 null_if_1 => 0 null_if_3 => 0 null_if_4 => 0 null_if_5 => 0 null_if_7 => 0 null_if_8 => 0 null_if_9 => 0 null_leq => 0 null_if_2 => 0 null_if_6 => 0 ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: app(z, z') -{ 1 }-> x :|: z' = x, x >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 app(z, z') -{ 1 }-> 1 + h + app(t, x) :|: z = 1 + h + t, z' = x, x >= 0, h >= 0, t >= 0 empty(z) -{ 1 }-> 2 :|: z = 0 empty(z) -{ 1 }-> 1 :|: z = 1 + h + t, h >= 0, t >= 0 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 fstsplit(z, z') -{ 1 }-> 0 :|: z' = x, x >= 0, z = 0 fstsplit(z, z') -{ 1 }-> 0 :|: n >= 0, z = 1 + n, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 fstsplit(z, z') -{ 1 }-> 1 + h + fstsplit(n, t) :|: z' = 1 + h + t, n >= 0, h >= 0, t >= 0, z = 1 + n head(z) -{ 1 }-> h :|: z = 1 + h + t, h >= 0, t >= 0 head(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if_1(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(sndsplit(m, st_1), 1 + fstsplit(m, st_1) + in_2, st_2, in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_1(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(1, head(in_2)), st_2)))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_2(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_3(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, sndsplit(m, st_2), 1 + fstsplit(m, st_2) + in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_3(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_4(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, tail(in_2), sndsplit(m, app(map_f(1, head(in_2)), st_2)), 1 + fstsplit(m, app(map_f(1, head(in_2)), st_2)) + in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_4(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_5(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, tail(in_2), st_2, in_3, st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_5(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(0, head(in_3)), st_3)))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 1 }-> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_6(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_7(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_7(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_8(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(0, head(in_3)), st_3)), m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, in_3 >= 0, z4 = 1, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_8(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 if_9(z, z', z'', z1, z2, z3, z4) -{ 1 }-> ring(st_1, in_2, st_2, tail(in_3), st_3, m) :|: z = st_1, z' = in_2, st_3 >= 0, z1 = in_3, z4 = 2, in_3 >= 0, in_2 >= 0, st_2 >= 0, z'' = st_2, z2 = st_3, st_1 >= 0, z3 = m, m >= 0 if_9(z, z', z'', z1, z2, z3, z4) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v6 >= 0, z'' = v2, v1 >= 0, v5 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0, z3 = v5, v4 >= 0, z4 = v6 length(z) -{ 1 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 length(z) -{ 1 }-> 1 + length(t) :|: z = 1 + h + t, h >= 0, t >= 0 leq(z, z') -{ 1 }-> leq(n, m) :|: n >= 0, z' = 1 + m, z = 1 + n, m >= 0 leq(z, z') -{ 1 }-> 2 :|: z' = m, z = 0, m >= 0 leq(z, z') -{ 1 }-> 1 :|: n >= 0, z = 1 + n, z' = 0 leq(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 map_f(z, z') -{ 1 }-> app(1 + pid + h, map_f(pid, t)) :|: z' = 1 + h + t, z = pid, h >= 0, t >= 0, pid >= 0 map_f(z, z') -{ 1 }-> 0 :|: z = pid, pid >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(0, head(in_3)))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(1, head(in_2)))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 ring(z, z', z'', z1, z2, z3) -{ 1 }-> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) :|: st_2 >= 0, z = st_1, z' = in_2, st_3 >= 0, z'' = st_2, z2 = st_3, z1 = in_3, in_3 >= 0, st_1 >= 0, z3 = m, in_2 >= 0, m >= 0 sndsplit(z, z') -{ 1 }-> x :|: z' = x, x >= 0, z = 0 sndsplit(z, z') -{ 1 }-> sndsplit(n, t) :|: z' = 1 + h + t, n >= 0, h >= 0, t >= 0, z = 1 + n sndsplit(z, z') -{ 1 }-> 0 :|: n >= 0, z = 1 + n, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 tail(z) -{ 1 }-> t :|: z = 1 + h + t, h >= 0, t >= 0 tail(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (81) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (82) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) S tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, head_1, tail_1, ring_6, if_1_7, if_2_7, if_3_7, if_4_7, if_5_7, if_6_7, if_7_7, if_8_7, if_9_7 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, EMPTY_1, LEQ_2, LENGTH_1, APP_2, MAP_F_2, HEAD_1, TAIL_1, RING_6, IF_1_7, IF_2_7, IF_3_7, IF_4_7, IF_5_7, IF_6_7, IF_7_7, IF_8_7, IF_9_7 Compound Symbols: c, c1, c2_1, c3, c4, c5_1, c6, c7, c8, c9, c10_1, c11, c12_1, c13, c14_1, c15, c16_2, c17, c18, c19_3, c20_3, c21_4, c22_3, c23_4, c24_2, c25_2, c26_3, c27_6, c28_2, c29_2, c30_2, c31_5, c32_5, c33_2, c34_3, c35_6, c36_2, c37_2, c38_5, c39_2 ---------------------------------------- (83) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 13 trailing nodes: LENGTH(nil) -> c11 EMPTY(cons(z0, z1)) -> c7 SNDSPLIT(s(z0), nil) -> c4 MAP_F(z0, nil) -> c15 LEQ(s(z0), 0) -> c9 SNDSPLIT(0, z0) -> c3 TAIL(cons(z0, z1)) -> c18 APP(nil, z0) -> c13 FSTSPLIT(s(z0), nil) -> c1 LEQ(0, z0) -> c8 EMPTY(nil) -> c6 FSTSPLIT(0, z0) -> c HEAD(cons(z0, z1)) -> c17 ---------------------------------------- (84) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, head_1, tail_1, ring_6, if_1_7, if_2_7, if_3_7, if_4_7, if_5_7, if_6_7, if_7_7, if_8_7, if_9_7 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, MAP_F_2, RING_6, IF_1_7, IF_2_7, IF_3_7, IF_4_7, IF_5_7, IF_6_7, IF_7_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c16_2, c19_3, c20_3, c21_4, c22_3, c23_4, c24_2, c25_2, c26_3, c27_6, c28_2, c29_2, c30_2, c31_5, c32_5, c33_2, c34_3, c35_6, c36_2, c37_2, c38_5, c39_2 ---------------------------------------- (85) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 19 trailing tuple parts ---------------------------------------- (86) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, head_1, tail_1, ring_6, if_1_7, if_2_7, if_3_7, if_4_7, if_5_7, if_6_7, if_7_7, if_8_7, if_9_7 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, RING_6, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c20_3, c22_3, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c19_2, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1 ---------------------------------------- (87) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) ---------------------------------------- (88) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) K tuples:none Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, RING_6, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c20_3, c22_3, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c19_2, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1 ---------------------------------------- (89) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) We considered the (Usable) Rules: map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) map_f(z0, nil) -> nil And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(APP(x_1, x_2)) = x_1 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = 0 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = 0 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] + x_2 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = [1] + x_1 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = x_1 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] + x_1 POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (90) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, RING_6, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c20_3, c22_3, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c19_2, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1 ---------------------------------------- (91) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) by RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LEQ(0, length(x2)), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil)), LENGTH(nil)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) ---------------------------------------- (92) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LEQ(0, length(x2)), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil)), LENGTH(nil)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LEQ(0, length(x2)), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil)), LENGTH(nil)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, RING_6, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c22_3, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c19_2, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3 ---------------------------------------- (93) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (94) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, RING_6, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c22_3, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c19_2, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2 ---------------------------------------- (95) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) by RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LEQ(0, length(x4)), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil)), LENGTH(nil)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) ---------------------------------------- (96) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LEQ(0, length(x4)), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil)), LENGTH(nil)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LEQ(0, length(x4)), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil)), LENGTH(nil)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, RING_6, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c19_2, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3 ---------------------------------------- (97) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, RING_6, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c19_2, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2 ---------------------------------------- (99) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), FSTSPLIT(z5, z0)) by RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, z0)) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, z0)) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, z0)) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, RING_6, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2 ---------------------------------------- (101) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (102) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, RING_6, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1 ---------------------------------------- (103) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = [1] POL(head(x_1)) = [1] + x_1 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] + x_1 POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (104) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, RING_6, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c21_2, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1 ---------------------------------------- (105) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), MAP_F(two, head(z1))) by RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) ---------------------------------------- (106) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, RING_6, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c23_2, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2 ---------------------------------------- (107) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), MAP_F(three, head(z3))) by RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) ---------------------------------------- (108) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c26_2, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2 ---------------------------------------- (109) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), FSTSPLIT(z5, z2)) by IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil)), FSTSPLIT(0, z0)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) ---------------------------------------- (110) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil)), FSTSPLIT(0, z0)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil)), FSTSPLIT(0, z0)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2 ---------------------------------------- (111) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (112) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1 ---------------------------------------- (113) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) We considered the (Usable) Rules: empty(nil) -> true empty(cons(z0, z1)) -> false And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] + x_1 POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (114) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_2_7, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c27_4, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1 ---------------------------------------- (115) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) by IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, app(map_f(two, head(x1)), x2)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) ---------------------------------------- (116) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, app(map_f(two, head(x1)), x2)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, app(map_f(two, head(x1)), x2)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4 ---------------------------------------- (117) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (118) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3 ---------------------------------------- (119) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = [1] POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] + x_1 POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (120) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c31_4, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3 ---------------------------------------- (121) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) by IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) ---------------------------------------- (122) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c32_4, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1 ---------------------------------------- (123) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1))) by IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) ---------------------------------------- (124) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c34_2, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1 ---------------------------------------- (125) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), FSTSPLIT(z5, z4)) by IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil)), FSTSPLIT(0, z0)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) ---------------------------------------- (126) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil)), FSTSPLIT(0, z0)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil)), FSTSPLIT(0, z0)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil)), FSTSPLIT(s(z0), nil)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2 ---------------------------------------- (127) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (128) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1 ---------------------------------------- (129) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = [1] POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (130) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_6_7, IF_8_7, IF_9_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c35_4, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1 ---------------------------------------- (131) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) by IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, app(map_f(three, head(x3)), x4)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) ---------------------------------------- (132) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, app(map_f(three, head(x3)), x4)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), FSTSPLIT(0, app(map_f(three, head(x3)), x4)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4 ---------------------------------------- (133) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (134) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3 ---------------------------------------- (135) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = [1] POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] + x_1 POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (136) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c38_4, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3 ---------------------------------------- (137) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3))) by IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) ---------------------------------------- (138) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_3, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1 ---------------------------------------- (139) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(x0, x1, cons(z0, z1), x3, x4, x5) -> c20(IF_2(x0, x1, cons(z0, z1), x3, x4, x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) by RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LEQ(0, length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c20(LEQ(x6, length(cons(x2, x3))), LENGTH(cons(x2, x3))) ---------------------------------------- (140) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LEQ(0, length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c20(LEQ(x6, length(cons(x2, x3))), LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LEQ(0, length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c20(LEQ(x6, length(cons(x2, x3))), LENGTH(cons(x2, x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3 ---------------------------------------- (141) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (142) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c20(LEQ(x6, length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c20(LEQ(x6, length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3 ---------------------------------------- (143) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (144) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1 ---------------------------------------- (145) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) We considered the (Usable) Rules: sndsplit(s(z0), nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) sndsplit(0, z0) -> z0 map_f(z0, nil) -> nil app(nil, z0) -> z0 sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_3 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_1 + x_2 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] + x_2 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = 0 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = x_2 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (146) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1 ---------------------------------------- (147) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(x0, x1, nil, x3, x4, x5) -> c20(IF_2(x0, x1, nil, x3, x4, x5, leq(x5, 0)), LEQ(x5, length(nil))) by RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true), LEQ(0, length(nil))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) ---------------------------------------- (148) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true), LEQ(0, length(nil))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true), LEQ(0, length(nil))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1 ---------------------------------------- (149) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (150) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1 ---------------------------------------- (151) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) We considered the (Usable) Rules: sndsplit(s(z0), nil) -> nil app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) sndsplit(0, z0) -> z0 app(nil, z0) -> z0 sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_3 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = x_2 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = [1] POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = x_2 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (152) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_3, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1 ---------------------------------------- (153) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(x0, x1, x2, x3, cons(z0, z1), x5) -> c22(IF_6(x0, x1, x2, x3, cons(z0, z1), x5, leq(x5, s(length(z1)))), LEQ(x5, length(cons(z0, z1))), LENGTH(cons(z0, z1))) by RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LEQ(0, length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c22(LEQ(x6, length(cons(x4, x5))), LENGTH(cons(x4, x5))) ---------------------------------------- (154) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LEQ(0, length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c22(LEQ(x6, length(cons(x4, x5))), LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LEQ(0, length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c22(LEQ(x6, length(cons(x4, x5))), LENGTH(cons(x4, x5))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3 ---------------------------------------- (155) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (156) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c22(LEQ(x6, length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c22(LEQ(x6, length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3 ---------------------------------------- (157) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (158) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1 ---------------------------------------- (159) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) We considered the (Usable) Rules: sndsplit(s(z0), nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) sndsplit(0, z0) -> z0 map_f(z0, nil) -> nil app(nil, z0) -> z0 sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_5 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_1 + x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] + x_2 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = 0 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = x_2 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (160) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1 ---------------------------------------- (161) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(x0, x1, x2, x3, nil, x5) -> c22(IF_6(x0, x1, x2, x3, nil, x5, leq(x5, 0)), LEQ(x5, length(nil))) by RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true), LEQ(0, length(nil))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) ---------------------------------------- (162) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true), LEQ(0, length(nil))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true), LEQ(0, length(nil))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1 ---------------------------------------- (163) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (164) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1 ---------------------------------------- (165) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) We considered the (Usable) Rules: sndsplit(s(z0), nil) -> nil app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) sndsplit(0, z0) -> z0 app(nil, z0) -> z0 sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_5 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = x_2 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = [1] POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = x_2 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (166) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1 ---------------------------------------- (167) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(cons(z1, z2), x1, x2, x3, x4, s(z0)) -> c19(IF_1(cons(z1, z2), x1, x2, x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) by RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) ---------------------------------------- (168) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2 ---------------------------------------- (169) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) We considered the (Usable) Rules:none And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_2 + x_6 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_6 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = [1] + x_1 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (170) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2 ---------------------------------------- (171) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) by RING(x0, x1, x2, x3, x4, 0) -> c19(IF_1(x0, x1, x2, x3, x4, 0, true)) ---------------------------------------- (172) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, x1, x2, x3, x4, 0) -> c19(IF_1(x0, x1, x2, x3, x4, 0, true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(z0, x1, x2, x3, x4, 0) -> c19(IF_1(z0, x1, x2, x3, x4, 0, empty(nil))) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2 ---------------------------------------- (173) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: RING(x0, x1, x2, x3, x4, 0) -> c19(IF_1(x0, x1, x2, x3, x4, 0, true)) ---------------------------------------- (174) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c19_1, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2 ---------------------------------------- (175) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) by RING(nil, x0, x1, x2, x3, s(x4)) -> c19(IF_1(nil, x0, x1, x2, x3, s(x4), true)) ---------------------------------------- (176) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(nil, x0, x1, x2, x3, s(x4)) -> c19(IF_1(nil, x0, x1, x2, x3, s(x4), true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) RING(nil, x1, x2, x3, x4, s(z0)) -> c19(IF_1(nil, x1, x2, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1 ---------------------------------------- (177) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: RING(nil, x0, x1, x2, x3, s(x4)) -> c19(IF_1(nil, x0, x1, x2, x3, s(x4), true)) ---------------------------------------- (178) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c21_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1 ---------------------------------------- (179) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(x0, cons(z0, z1), x2, x3, x4, x5) -> c21(IF_5(x0, cons(z0, z1), x2, x3, x4, x5, empty(map_f(two, z0))), MAP_F(two, head(cons(z0, z1)))) by RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(app(f(two, z1), map_f(two, z2)))), MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) ---------------------------------------- (180) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(app(f(two, z1), map_f(two, z2)))), MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(app(f(two, z1), map_f(two, z2)))), MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1 ---------------------------------------- (181) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (182) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1 ---------------------------------------- (183) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) We considered the (Usable) Rules: leq(0, z0) -> true empty(nil) -> true empty(cons(z0, z1)) -> false leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_2 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = [1] POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = [1] POL(two) = 0 ---------------------------------------- (184) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c23_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1 ---------------------------------------- (185) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace RING(x0, x1, x2, cons(z0, z1), x4, x5) -> c23(IF_9(x0, x1, x2, cons(z0, z1), x4, x5, empty(map_f(three, z0))), MAP_F(three, head(cons(z0, z1)))) by RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(app(f(three, z1), map_f(three, z2)))), MAP_F(three, head(cons(cons(z1, z2), x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) ---------------------------------------- (186) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(app(f(three, z1), map_f(three, z2)))), MAP_F(three, head(cons(cons(z1, z2), x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(app(f(three, z1), map_f(three, z2)))), MAP_F(three, head(cons(cons(z1, z2), x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1 ---------------------------------------- (187) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (188) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1 ---------------------------------------- (189) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) We considered the (Usable) Rules: leq(0, z0) -> true empty(nil) -> true empty(cons(z0, z1)) -> false leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_2 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = [1] POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = [1] POL(two) = 0 ---------------------------------------- (190) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c26_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1 ---------------------------------------- (191) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(x0, x1, cons(z1, z2), x3, x4, s(z0), true) -> c26(IF_3(x0, x1, cons(z1, z2), x3, x4, s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) by IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) ---------------------------------------- (192) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2 ---------------------------------------- (193) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) We considered the (Usable) Rules:none And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_2 + x_6 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_6 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = [1] POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (194) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2 ---------------------------------------- (195) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) by IF_2(x0, x1, x2, x3, x4, 0, true) -> c26(IF_3(x0, x1, x2, x3, x4, 0, true)) ---------------------------------------- (196) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) IF_2(x0, x1, x2, x3, x4, 0, true) -> c26(IF_3(x0, x1, x2, x3, x4, 0, true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, z0, x3, x4, 0, true) -> c26(IF_3(x0, x1, z0, x3, x4, 0, empty(nil))) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2 ---------------------------------------- (197) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: RING(x0, x1, nil, x2, x3, 0) -> c20(IF_2(x0, x1, nil, x2, x3, 0, true)) IF_2(x0, x1, x2, x3, x4, 0, true) -> c26(IF_3(x0, x1, x2, x3, x4, 0, true)) ---------------------------------------- (198) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c20(IF_2(x0, x1, x2, x3, x4, 0, true), LENGTH(x2)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, 0, true), LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c20_2, c22_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2 ---------------------------------------- (199) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (200) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2 ---------------------------------------- (201) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) We considered the (Usable) Rules:none And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_2 + x_6 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_6 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (202) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2 ---------------------------------------- (203) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) empty(nil) -> true map_f(z0, nil) -> nil empty(cons(z0, z1)) -> false app(nil, z0) -> z0 fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 + x_6 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 + x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 + x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] + x_6 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_1 + x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = 0 POL(false) = [1] POL(fstsplit(x_1, x_2)) = x_2 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = x_1 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (204) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c26_1, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2 ---------------------------------------- (205) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) by IF_2(x0, x1, nil, x2, x3, s(x4), true) -> c26(IF_3(x0, x1, nil, x2, x3, s(x4), true)) ---------------------------------------- (206) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, x1, nil, x2, x3, s(x4), true) -> c26(IF_3(x0, x1, nil, x2, x3, s(x4), true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, nil, x3, x4, s(z0), true) -> c26(IF_3(x0, x1, nil, x3, x4, s(z0), empty(nil))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1 ---------------------------------------- (207) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IF_2(x0, x1, nil, x2, x3, s(x4), true) -> c26(IF_3(x0, x1, nil, x2, x3, s(x4), true)) ---------------------------------------- (208) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c27_4, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1 ---------------------------------------- (209) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c27(IF_4(x0, cons(z0, z1), x2, x3, x4, x5, empty(fstsplit(x5, app(map_f(two, z0), x2)))), FSTSPLIT(x5, app(map_f(two, head(cons(z0, z1))), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) by IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), FSTSPLIT(0, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c27(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) ---------------------------------------- (210) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), FSTSPLIT(0, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c27(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), FSTSPLIT(0, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c27(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4 ---------------------------------------- (211) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (212) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c27(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c27(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4 ---------------------------------------- (213) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (214) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1 ---------------------------------------- (215) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) We considered the (Usable) Rules: leq(0, z0) -> true empty(nil) -> true empty(cons(z0, z1)) -> false leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_2 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = [1] POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = x_1 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = [1] POL(two) = 0 ---------------------------------------- (216) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1 ---------------------------------------- (217) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = [1] POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = [1] + x_1 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (218) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c27_3, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1 ---------------------------------------- (219) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) by IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, true), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) ---------------------------------------- (220) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, true), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1 ---------------------------------------- (221) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (222) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c27_2 ---------------------------------------- (223) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (224) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_4, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1 ---------------------------------------- (225) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), SNDSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) by IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), SNDSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), SNDSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) ---------------------------------------- (226) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), SNDSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), SNDSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), SNDSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), SNDSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4 ---------------------------------------- (227) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (228) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3 ---------------------------------------- (229) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) We considered the (Usable) Rules: leq(0, z0) -> true empty(nil) -> true empty(cons(z0, z1)) -> false leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_2 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = [1] POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = 0 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = [1] POL(two) = 0 ---------------------------------------- (230) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_4, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3 ---------------------------------------- (231) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_4(x0, cons(z0, z1), x2, x3, x4, x5, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), cons(fstsplit(x5, app(map_f(two, head(cons(z0, z1))), x2)), x3), x4, x5), FSTSPLIT(x5, app(map_f(two, z0), x2)), APP(map_f(two, head(cons(z0, z1))), x2), MAP_F(two, head(cons(z0, z1)))) by IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), FSTSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), FSTSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) ---------------------------------------- (232) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), FSTSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), FSTSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), FSTSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), FSTSPLIT(0, app(map_f(two, x1), x3)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4 ---------------------------------------- (233) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (234) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3 ---------------------------------------- (235) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil empty(nil) -> true empty(cons(z0, z1)) -> false app(nil, z0) -> z0 fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_3 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = x_2 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (236) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_1, c34_2, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3 ---------------------------------------- (237) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(x0, x1, x2, x3, cons(z1, z2), s(z0), true) -> c34(IF_7(x0, x1, x2, x3, cons(z1, z2), s(z0), empty(cons(z1, fstsplit(z0, z2)))), FSTSPLIT(s(z0), cons(z1, z2))) by IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) ---------------------------------------- (238) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_1, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2 ---------------------------------------- (239) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) We considered the (Usable) Rules:none And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_2 + x_6 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = x_6 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = 0 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = 0 POL(fstsplit(x_1, x_2)) = 0 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = [1] POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (240) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_1, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2 ---------------------------------------- (241) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) by IF_6(x0, x1, x2, x3, x4, 0, true) -> c34(IF_7(x0, x1, x2, x3, x4, 0, true)) ---------------------------------------- (242) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) IF_6(x0, x1, x2, x3, x4, 0, true) -> c34(IF_7(x0, x1, x2, x3, x4, 0, true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c27(IF_4(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(two, head(x1)), x2), MAP_F(two, head(x1))) IF_6(x0, x1, x2, x3, z0, 0, true) -> c34(IF_7(x0, x1, x2, x3, z0, 0, empty(nil))) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_1, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2 ---------------------------------------- (243) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: RING(x0, x1, x2, x3, nil, 0) -> c22(IF_6(x0, x1, x2, x3, nil, 0, true)) IF_6(x0, x1, x2, x3, x4, 0, true) -> c34(IF_7(x0, x1, x2, x3, x4, 0, true)) ---------------------------------------- (244) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) RING(x0, x1, x2, x3, x4, 0) -> c22(IF_6(x0, x1, x2, x3, x4, 0, true), LENGTH(x4)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), 0, true), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_6_7, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c22_2, c31_1, c32_1, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2 ---------------------------------------- (245) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (246) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2 ---------------------------------------- (247) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) We considered the (Usable) Rules: leq(0, z0) -> true empty(nil) -> true empty(cons(z0, z1)) -> false leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 + x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 + x_7 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 + x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 + x_7 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_6 + x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_6 POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] + x_6 POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = [1] POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = 0 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = [1] POL(two) = 0 ---------------------------------------- (248) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2 ---------------------------------------- (249) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) empty(nil) -> true map_f(z0, nil) -> nil empty(cons(z0, z1)) -> false app(nil, z0) -> z0 fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_5 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = x_1 + x_2 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = 0 POL(false) = [1] POL(fstsplit(x_1, x_2)) = x_2 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (250) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c34_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2 ---------------------------------------- (251) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) by IF_6(x0, x1, x2, x3, nil, s(x4), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(x4), true)) ---------------------------------------- (252) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, x3, nil, s(x4), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(x4), true)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, nil, s(z0), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(z0), empty(nil))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1 ---------------------------------------- (253) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: IF_6(x0, x1, x2, x3, nil, s(x4), true) -> c34(IF_7(x0, x1, x2, x3, nil, s(x4), true)) ---------------------------------------- (254) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c35_4, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1 ---------------------------------------- (255) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c35(IF_8(x0, x1, x2, cons(z0, z1), x4, x5, empty(fstsplit(x5, app(map_f(three, z0), x4)))), FSTSPLIT(x5, app(map_f(three, head(cons(z0, z1))), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) by IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), FSTSPLIT(0, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c35(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) ---------------------------------------- (256) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), FSTSPLIT(0, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c35(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), FSTSPLIT(0, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c35(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4 ---------------------------------------- (257) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (258) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c35(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c35(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4 ---------------------------------------- (259) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (260) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c6_1 ---------------------------------------- (261) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) We considered the (Usable) Rules: leq(0, z0) -> true empty(nil) -> true empty(cons(z0, z1)) -> false leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(x_1)) = x_1 POL(cons(x_1, x_2)) = 0 POL(empty(x_1)) = [1] POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = 0 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = [1] POL(two) = 0 ---------------------------------------- (262) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c6_1 ---------------------------------------- (263) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) We considered the (Usable) Rules: fstsplit(s(z0), nil) -> nil empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c6(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] POL(empty(x_1)) = x_1 POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = [1] POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = 0 POL(two) = 0 ---------------------------------------- (264) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, IF_6_7, RING_6, IF_2_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c35_3, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c6_1 ---------------------------------------- (265) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) by IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, true), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) ---------------------------------------- (266) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, true), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1 ---------------------------------------- (267) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (268) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c35_2 ---------------------------------------- (269) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (270) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_4, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c7_1 ---------------------------------------- (271) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_8(x0, x1, x2, cons(z0, z1), x4, x5, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x5, app(map_f(three, head(cons(z0, z1))), x4)), x5), SNDSPLIT(x5, app(map_f(three, z0), x4)), APP(map_f(three, head(cons(z0, z1))), x4), MAP_F(three, head(cons(z0, z1)))) by IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), SNDSPLIT(0, app(map_f(three, x3), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) ---------------------------------------- (272) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), SNDSPLIT(0, app(map_f(three, x3), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), SNDSPLIT(0, app(map_f(three, x3), x5)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c7_1, c38_4 ---------------------------------------- (273) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (274) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c7_1, c38_4, c38_3 ---------------------------------------- (275) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) We considered the (Usable) Rules: leq(0, z0) -> true empty(nil) -> true empty(cons(z0, z1)) -> false leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) And the Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = 0 POL(FSTSPLIT(x_1, x_2)) = 0 POL(IF_1(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_2(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_3(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_4(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_5(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] + x_2 POL(IF_6(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(IF_7(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_8(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = x_7 POL(IF_9(x_1, x_2, x_3, x_4, x_5, x_6, x_7)) = [1] POL(LENGTH(x_1)) = 0 POL(LEQ(x_1, x_2)) = 0 POL(MAP_F(x_1, x_2)) = x_1 POL(RING(x_1, x_2, x_3, x_4, x_5, x_6)) = [1] POL(SNDSPLIT(x_1, x_2)) = 0 POL(app(x_1, x_2)) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1)) = x_1 POL(c16(x_1)) = x_1 POL(c19(x_1)) = x_1 POL(c19(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c20(x_1)) = x_1 POL(c20(x_1, x_2)) = x_1 + x_2 POL(c20(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c21(x_1)) = x_1 POL(c21(x_1, x_2)) = x_1 + x_2 POL(c22(x_1)) = x_1 POL(c22(x_1, x_2)) = x_1 + x_2 POL(c22(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c23(x_1)) = x_1 POL(c23(x_1, x_2)) = x_1 + x_2 POL(c24(x_1, x_2)) = x_1 + x_2 POL(c25(x_1, x_2)) = x_1 + x_2 POL(c26(x_1)) = x_1 POL(c26(x_1, x_2)) = x_1 + x_2 POL(c27(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c27(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c28(x_1, x_2)) = x_1 + x_2 POL(c29(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c31(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c31(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c32(x_1)) = x_1 POL(c32(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c32(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c33(x_1)) = x_1 POL(c34(x_1)) = x_1 POL(c34(x_1, x_2)) = x_1 + x_2 POL(c35(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c35(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c36(x_1, x_2)) = x_1 + x_2 POL(c37(x_1)) = x_1 POL(c38(x_1)) = x_1 POL(c38(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c38(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_3 + x_4 POL(c39(x_1)) = x_1 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(cons(x_1, x_2)) = 0 POL(empty(x_1)) = [1] POL(f(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(fstsplit(x_1, x_2)) = 0 POL(head(x_1)) = 0 POL(length(x_1)) = 0 POL(leq(x_1, x_2)) = [1] POL(map_f(x_1, x_2)) = 0 POL(nil) = 0 POL(s(x_1)) = 0 POL(sndsplit(x_1, x_2)) = 0 POL(tail(x_1)) = [1] POL(three) = 0 POL(true) = [1] POL(two) = 0 ---------------------------------------- (276) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c27_3, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c7_1, c38_4, c38_3 ---------------------------------------- (277) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) by IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, true), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) ---------------------------------------- (278) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, true), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c7_1, c38_4, c38_3, c27_3 ---------------------------------------- (279) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (280) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c7_1, c38_4, c38_3, c27_2 ---------------------------------------- (281) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (282) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(MAP_F(two, head(cons(x1, x2)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c35_3, c6_1, c7_1, c38_4, c38_3, c8_1 ---------------------------------------- (283) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) by IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, true), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) ---------------------------------------- (284) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, true), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c6_1, c7_1, c38_4, c38_3, c8_1, c35_3 ---------------------------------------- (285) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (286) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c6_1, c7_1, c38_4, c38_3, c8_1, c35_2 ---------------------------------------- (287) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (288) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) empty(nil) -> true empty(cons(z0, z1)) -> false map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) tail(cons(z0, z1)) -> z1 Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(APP(map_f(two, head(x1)), x2)) IF_2(x0, x1, x2, x3, x4, 0, false) -> c4(MAP_F(two, head(x1))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(APP(map_f(three, head(x3)), x4)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c7(MAP_F(three, head(x3))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c8(MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c9(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c9(MAP_F(three, head(cons(x3, x4)))) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c31(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_4(x0, x1, x2, x3, x4, x5, false) -> c32(RING(x0, tail(x1), sndsplit(x5, app(map_f(two, head(x1)), x2)), cons(fstsplit(x5, app(map_f(two, head(x1)), x2)), x3), x4, x5)) IF_8(x0, x1, x2, x3, x4, x5, false) -> c38(RING(x0, x1, x2, tail(x3), sndsplit(x5, app(map_f(three, head(x3)), x4)), x5)) RING(x0, x1, cons(x2, x3), x4, x5, s(z0)) -> c20(IF_2(x0, x1, cons(x2, x3), x4, x5, s(z0), leq(z0, length(x3))), LEQ(s(z0), length(cons(x2, x3))), LENGTH(cons(x2, x3))) RING(x0, x1, cons(x2, nil), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, nil), x4, x5, x6, leq(x6, s(0))), LEQ(x6, length(cons(x2, nil))), LENGTH(cons(x2, nil))) RING(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6) -> c20(IF_2(x0, x1, cons(x2, cons(z0, z1)), x4, x5, x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x2, cons(z0, z1)))), LENGTH(cons(x2, cons(z0, z1)))) RING(x0, x1, x2, x3, cons(x4, x5), s(z0)) -> c22(IF_6(x0, x1, x2, x3, cons(x4, x5), s(z0), leq(z0, length(x5))), LEQ(s(z0), length(cons(x4, x5))), LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, cons(x4, nil), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, nil), x6, leq(x6, s(0))), LEQ(x6, length(cons(x4, nil))), LENGTH(cons(x4, nil))) RING(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6) -> c22(IF_6(x0, x1, x2, x3, cons(x4, cons(z0, z1)), x6, leq(x6, s(s(length(z1))))), LEQ(x6, length(cons(x4, cons(z0, z1)))), LENGTH(cons(x4, cons(z0, z1)))) RING(cons(z0, x1), x2, x3, x4, x5, s(x6)) -> c19(IF_1(cons(z0, x1), x2, x3, x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x1))) RING(cons(x0, z0), x2, x3, x4, x5, s(0)) -> c19(IF_1(cons(x0, z0), x2, x3, x4, x5, s(0), empty(cons(x0, nil))), FSTSPLIT(s(0), cons(x0, z0))) RING(cons(x0, nil), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, nil), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, nil))), FSTSPLIT(s(s(z0)), cons(x0, nil))) RING(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0))) -> c19(IF_1(cons(x0, cons(z1, z2)), x2, x3, x4, x5, s(s(z0)), empty(cons(x0, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x0, cons(z1, z2)))) RING(x0, cons(nil, x2), x3, x4, x5, x6) -> c21(IF_5(x0, cons(nil, x2), x3, x4, x5, x6, empty(nil)), MAP_F(two, head(cons(nil, x2)))) RING(x0, x1, x2, cons(nil, x4), x5, x6) -> c23(IF_9(x0, x1, x2, cons(nil, x4), x5, x6, empty(nil)), MAP_F(three, head(cons(nil, x4)))) IF_2(x0, x1, cons(z0, x3), x4, x5, s(x6), true) -> c26(IF_3(x0, x1, cons(z0, x3), x4, x5, s(x6), false), FSTSPLIT(s(x6), cons(z0, x3))) IF_2(x0, x1, cons(x2, z0), x4, x5, s(0), true) -> c26(IF_3(x0, x1, cons(x2, z0), x4, x5, s(0), empty(cons(x2, nil))), FSTSPLIT(s(0), cons(x2, z0))) IF_2(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, nil), x4, x5, s(s(z0)), empty(cons(x2, nil))), FSTSPLIT(s(s(z0)), cons(x2, nil))) IF_2(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), true) -> c26(IF_3(x0, x1, cons(x2, cons(z1, z2)), x4, x5, s(s(z0)), empty(cons(x2, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x2, cons(z1, z2)))) IF_2(x0, cons(nil, x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(nil, x2), x3, x4, x5, x6, empty(fstsplit(x6, app(nil, x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(nil, x2))), x3)), APP(map_f(two, head(cons(nil, x2))), x3), MAP_F(two, head(cons(nil, x2)))) IF_2(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, false) -> c27(IF_4(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6, empty(fstsplit(x6, app(app(f(two, z1), map_f(two, z2)), x3)))), FSTSPLIT(x6, app(map_f(two, head(cons(cons(z1, z2), x2))), x3)), APP(map_f(two, head(cons(cons(z1, z2), x2))), x3), MAP_F(two, head(cons(cons(z1, z2), x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c31(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), SNDSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c31(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, z0), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, tail(cons(z0, z1)), sndsplit(x6, app(map_f(two, z0), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(z0, z1), x3, x4, x5, x6, false) -> c32(RING(x0, z1, sndsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), cons(fstsplit(x6, app(map_f(two, head(cons(z0, z1))), x3)), x4), x5, x6), FSTSPLIT(x6, app(map_f(two, z0), x3)), APP(map_f(two, head(cons(z0, z1))), x3), MAP_F(two, head(cons(z0, z1)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), sndsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), cons(nil, x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c32(RING(x0, tail(cons(x1, x2)), app(map_f(two, head(cons(x1, x2))), x3), cons(fstsplit(0, app(map_f(two, head(cons(x1, x2))), x3)), x4), x5, 0), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_6(x0, x1, x2, x3, cons(z0, x5), s(x6), true) -> c34(IF_7(x0, x1, x2, x3, cons(z0, x5), s(x6), false), FSTSPLIT(s(x6), cons(z0, x5))) IF_6(x0, x1, x2, x3, cons(x4, z0), s(0), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, z0), s(0), empty(cons(x4, nil))), FSTSPLIT(s(0), cons(x4, z0))) IF_6(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, nil), s(s(z0)), empty(cons(x4, nil))), FSTSPLIT(s(s(z0)), cons(x4, nil))) IF_6(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), true) -> c34(IF_7(x0, x1, x2, x3, cons(x4, cons(z1, z2)), s(s(z0)), empty(cons(x4, cons(z1, fstsplit(z0, z2))))), FSTSPLIT(s(s(z0)), cons(x4, cons(z1, z2)))) IF_6(x0, x1, x2, cons(nil, x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(nil, x4), x5, x6, empty(fstsplit(x6, app(nil, x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(nil, x4))), x5)), APP(map_f(three, head(cons(nil, x4))), x5), MAP_F(three, head(cons(nil, x4)))) IF_6(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, false) -> c35(IF_8(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6, empty(fstsplit(x6, app(app(f(three, z1), map_f(three, z2)), x5)))), FSTSPLIT(x6, app(map_f(three, head(cons(cons(z1, z2), x4))), x5)), APP(map_f(three, head(cons(cons(z1, z2), x4))), x5), MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, tail(cons(z0, z1)), sndsplit(x6, app(map_f(three, z0), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(z0, z1), x5, x6, false) -> c38(RING(x0, x1, x2, z1, sndsplit(x6, app(map_f(three, head(cons(z0, z1))), x5)), x6), SNDSPLIT(x6, app(map_f(three, z0), x5)), APP(map_f(three, head(cons(z0, z1))), x5), MAP_F(three, head(cons(z0, z1)))) IF_8(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c38(RING(x0, x1, x2, tail(cons(x3, x4)), app(map_f(three, head(cons(x3, x4))), x5), 0), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) K tuples: APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) IF_6(x0, x1, x2, x3, x4, 0, false) -> c35(IF_8(x0, x1, x2, x3, x4, 0, empty(nil)), APP(map_f(three, head(x3)), x4), MAP_F(three, head(x3))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LEQ(x6, length(cons(x2, x3)))) RING(x0, x1, cons(x2, x3), x4, x5, x6) -> c(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, x4) -> c20(LEQ(x4, length(nil))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LEQ(x6, length(cons(x4, x5)))) RING(x0, x1, x2, x3, cons(x4, x5), x6) -> c1(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, x4) -> c22(LEQ(x4, length(nil))) RING(cons(x0, x1), x2, x3, x4, x5, s(x6)) -> c19(FSTSPLIT(s(x6), cons(x0, x1))) RING(x0, cons(x1, x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(x1, x2)))) RING(x0, cons(cons(z1, z2), x2), x3, x4, x5, x6) -> c21(MAP_F(two, head(cons(cons(z1, z2), x2)))) RING(x0, x1, x2, cons(x3, x4), x5, x6) -> c23(MAP_F(three, head(cons(x3, x4)))) RING(x0, x1, x2, cons(cons(z1, z2), x4), x5, x6) -> c23(MAP_F(three, head(cons(cons(z1, z2), x4)))) IF_2(x0, x1, cons(x2, x3), x4, x5, s(x6), true) -> c26(FSTSPLIT(s(x6), cons(x2, x3))) RING(x0, x1, x2, x3, x4, 0) -> c20(LENGTH(x2)) RING(x0, x1, cons(x2, x3), x4, x5, 0) -> c20(LENGTH(cons(x2, x3))) RING(x0, x1, nil, x2, x3, s(z0)) -> c20(IF_2(x0, x1, nil, x2, x3, s(z0), false), LEQ(s(z0), length(nil))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(FSTSPLIT(x6, app(map_f(two, head(cons(x1, x2))), x3))) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(APP(map_f(two, head(cons(x1, x2))), x3)) IF_2(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c3(MAP_F(two, head(cons(x1, x2)))) IF_2(x0, cons(x1, x2), x3, x4, x5, 0, false) -> c27(IF_4(x0, cons(x1, x2), x3, x4, x5, 0, empty(nil)), APP(map_f(two, head(cons(x1, x2))), x3), MAP_F(two, head(cons(x1, x2)))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c31(SNDSPLIT(x6, app(map_f(two, x1), x3))) IF_4(x0, cons(x1, x2), x3, x4, x5, x6, false) -> c32(FSTSPLIT(x6, app(map_f(two, x1), x3))) IF_6(x0, x1, x2, x3, cons(x4, x5), s(x6), true) -> c34(FSTSPLIT(s(x6), cons(x4, x5))) RING(x0, x1, x2, x3, x4, 0) -> c22(LENGTH(x4)) RING(x0, x1, x2, x3, cons(x4, x5), 0) -> c22(LENGTH(cons(x4, x5))) RING(x0, x1, x2, x3, nil, s(z0)) -> c22(IF_6(x0, x1, x2, x3, nil, s(z0), false), LEQ(s(z0), length(nil))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(FSTSPLIT(x6, app(map_f(three, head(cons(x3, x4))), x5))) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(APP(map_f(three, head(cons(x3, x4))), x5)) IF_6(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c6(MAP_F(three, head(cons(x3, x4)))) IF_6(x0, x1, x2, cons(x3, x4), x5, 0, false) -> c35(IF_8(x0, x1, x2, cons(x3, x4), x5, 0, empty(nil)), APP(map_f(three, head(cons(x3, x4))), x5), MAP_F(three, head(cons(x3, x4)))) IF_8(x0, x1, x2, cons(x3, x4), x5, x6, false) -> c38(SNDSPLIT(x6, app(map_f(three, x3), x5))) Defined Rule Symbols: leq_2, length_1, sndsplit_2, fstsplit_2, empty_1, map_f_2, head_1, app_2, tail_1 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, IF_1_7, IF_3_7, IF_7_7, MAP_F_2, IF_4_7, IF_5_7, IF_8_7, IF_9_7, RING_6, IF_2_7, IF_6_7 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c24_2, c25_2, c28_2, c29_2, c36_2, c16_1, c30_1, c33_1, c37_1, c39_1, c31_1, c32_1, c38_1, c20_3, c_1, c20_2, c20_1, c22_3, c1_1, c22_2, c22_1, c19_2, c19_1, c21_2, c21_1, c23_2, c23_1, c26_2, c26_1, c27_4, c3_1, c4_1, c31_4, c31_3, c32_4, c32_3, c34_2, c34_1, c35_4, c6_1, c7_1, c38_4, c38_3, c8_1, c9_1