KILLED proof of input_E2eropFeZl.trs # AProVE Commit ID: 5b976082cb74a395683ed8cc7acf94bd611ab29f fuhs 20230524 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). (0) CpxTRS (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxTRS (3) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (4) CpxTRS (5) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (6) CdtProblem (7) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxRelTRS (9) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxRelTRS (11) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (12) typed CpxTrs (13) OrderProof [LOWER BOUND(ID), 0 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 316 ms] (16) BEST (17) proven lower bound (18) LowerBoundPropagationProof [FINISHED, 0 ms] (19) BOUNDS(n^1, INF) (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 895 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 192 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 61 ms] (26) typed CpxTrs (27) RewriteLemmaProof [LOWER BOUND(ID), 707 ms] (28) BEST (29) proven lower bound (30) LowerBoundPropagationProof [FINISHED, 0 ms] (31) BOUNDS(n^2, INF) (32) typed CpxTrs (33) RewriteLemmaProof [LOWER BOUND(ID), 1531 ms] (34) BEST (35) proven lower bound (36) LowerBoundPropagationProof [FINISHED, 0 ms] (37) BOUNDS(n^3, INF) (38) typed CpxTrs (39) RewriteLemmaProof [LOWER BOUND(ID), 381 ms] (40) BOUNDS(1, INF) (41) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (42) CpxWeightedTrs (43) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (44) CpxTypedWeightedTrs (45) CompletionProof [UPPER BOUND(ID), 0 ms] (46) CpxTypedWeightedCompleteTrs (47) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (48) CpxTypedWeightedCompleteTrs (49) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) InliningProof [UPPER BOUND(ID), 125 ms] (52) CpxRNTS (53) SimplificationProof [BOTH BOUNDS(ID, ID), 7 ms] (54) CpxRNTS (55) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (56) CpxRNTS (57) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 133 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 6 ms] (62) CpxRNTS (63) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 265 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 96 ms] (68) CpxRNTS (69) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 99 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 63 ms] (74) CpxRNTS (75) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (76) CpxRNTS (77) IntTrsBoundProof [UPPER BOUND(ID), 468 ms] (78) CpxRNTS (79) IntTrsBoundProof [UPPER BOUND(ID), 144 ms] (80) CpxRNTS (81) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (82) CpxRNTS (83) IntTrsBoundProof [UPPER BOUND(ID), 485 ms] (84) CpxRNTS (85) IntTrsBoundProof [UPPER BOUND(ID), 124 ms] (86) CpxRNTS (87) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (88) CpxRNTS (89) IntTrsBoundProof [UPPER BOUND(ID), 5065 ms] (90) CpxRNTS (91) IntTrsBoundProof [UPPER BOUND(ID), 756 ms] (92) CpxRNTS (93) CompletionProof [UPPER BOUND(ID), 0 ms] (94) CpxTypedWeightedCompleteTrs (95) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (96) CpxRNTS (97) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (98) CdtProblem (99) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (100) CdtProblem (101) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (102) CdtProblem (103) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (104) CdtProblem (105) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CpxRelTRS (107) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (108) CpxTRS (109) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (110) CpxWeightedTrs (111) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (112) CpxTypedWeightedTrs (113) CompletionProof [UPPER BOUND(ID), 0 ms] (114) CpxTypedWeightedCompleteTrs (115) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (116) CpxTypedWeightedCompleteTrs (117) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (118) CpxRNTS (119) InliningProof [UPPER BOUND(ID), 428 ms] (120) CpxRNTS (121) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (122) CpxRNTS (123) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 1 ms] (124) CpxRNTS (125) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (126) CpxRNTS (127) IntTrsBoundProof [UPPER BOUND(ID), 99 ms] (128) CpxRNTS (129) IntTrsBoundProof [UPPER BOUND(ID), 32 ms] (130) CpxRNTS (131) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (132) CpxRNTS (133) IntTrsBoundProof [UPPER BOUND(ID), 158 ms] (134) CpxRNTS (135) IntTrsBoundProof [UPPER BOUND(ID), 84 ms] (136) CpxRNTS (137) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (138) CpxRNTS (139) IntTrsBoundProof [UPPER BOUND(ID), 238 ms] (140) CpxRNTS (141) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (142) CpxRNTS (143) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (144) CpxRNTS (145) IntTrsBoundProof [UPPER BOUND(ID), 210 ms] (146) CpxRNTS (147) IntTrsBoundProof [UPPER BOUND(ID), 14 ms] (148) CpxRNTS (149) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (150) CpxRNTS (151) IntTrsBoundProof [UPPER BOUND(ID), 198 ms] (152) CpxRNTS (153) IntTrsBoundProof [UPPER BOUND(ID), 74 ms] (154) CpxRNTS (155) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (156) CpxRNTS (157) IntTrsBoundProof [UPPER BOUND(ID), 272 ms] (158) CpxRNTS (159) IntTrsBoundProof [UPPER BOUND(ID), 85 ms] (160) CpxRNTS (161) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (162) CpxRNTS (163) IntTrsBoundProof [UPPER BOUND(ID), 506 ms] (164) CpxRNTS (165) IntTrsBoundProof [UPPER BOUND(ID), 156 ms] (166) CpxRNTS (167) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (168) CpxRNTS (169) IntTrsBoundProof [UPPER BOUND(ID), 271 ms] (170) CpxRNTS (171) IntTrsBoundProof [UPPER BOUND(ID), 85 ms] (172) CpxRNTS (173) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (174) CpxRNTS (175) IntTrsBoundProof [UPPER BOUND(ID), 2584 ms] (176) CpxRNTS (177) IntTrsBoundProof [UPPER BOUND(ID), 928 ms] (178) CpxRNTS (179) CompletionProof [UPPER BOUND(ID), 0 ms] (180) CpxTypedWeightedCompleteTrs (181) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (182) CpxRNTS (183) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (184) CdtProblem (185) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (186) CdtProblem (187) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 51 ms] (188) CdtProblem (189) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (190) CdtProblem (191) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (192) CdtProblem (193) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 48 ms] (194) CdtProblem (195) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (196) CdtProblem (197) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (198) CdtProblem (199) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (200) CdtProblem (201) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 49 ms] (204) CdtProblem (205) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 67 ms] (210) CdtProblem (211) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (216) CdtProblem (217) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (218) CdtProblem (219) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 95 ms] (230) CdtProblem (231) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (240) CdtProblem (241) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (242) CdtProblem (243) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (244) CdtProblem (245) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (248) CdtProblem (249) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (250) CdtProblem (251) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (252) CdtProblem (253) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (254) CdtProblem (255) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem (259) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (260) CdtProblem (261) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (262) CdtProblem (263) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (264) CdtProblem (265) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (266) CdtProblem (267) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (268) CdtProblem (269) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (270) CdtProblem (271) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 1 ms] (272) CdtProblem (273) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (274) CdtProblem (275) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (276) CdtProblem (277) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (278) CdtProblem (279) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 31 ms] (280) CdtProblem (281) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (282) CdtProblem (283) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 70 ms] (284) CdtProblem (285) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (286) CdtProblem (287) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 77 ms] (288) CdtProblem (289) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (290) CdtProblem (291) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 49 ms] (292) CdtProblem (293) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (294) CdtProblem (295) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (296) CdtProblem (297) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (298) CdtProblem (299) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (300) CdtProblem (301) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (302) CdtProblem (303) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (304) CdtProblem (305) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (306) CdtProblem (307) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (308) CdtProblem (309) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (310) CdtProblem (311) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (312) CdtProblem (313) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (314) CdtProblem (315) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (316) CdtProblem (317) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (318) CdtProblem (319) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 71 ms] (320) CdtProblem (321) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (322) CdtProblem (323) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (324) CdtProblem (325) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (326) CdtProblem (327) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (328) CdtProblem (329) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (330) CdtProblem (331) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (332) CdtProblem (333) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (334) CdtProblem (335) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (336) CdtProblem (337) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (338) CdtProblem (339) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (340) CdtProblem (341) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (342) CdtProblem (343) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (344) CdtProblem (345) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (346) CdtProblem (347) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (348) CdtProblem (349) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (350) CdtProblem (351) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (352) CdtProblem (353) CdtRewritingProof [BOTH BOUNDS(ID, ID), 0 ms] (354) 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: plus(0, x) -> x plus(s(x), y) -> s(plus(x, y)) times(0, y) -> 0 times(s(x), y) -> plus(y, times(x, y)) p(s(x)) -> x p(0) -> 0 minus(x, 0) -> x minus(0, x) -> 0 minus(x, s(y)) -> p(minus(x, y)) isZero(0) -> true isZero(s(x)) -> false facIter(x, y) -> if(isZero(x), minus(x, s(0)), y, times(y, x)) if(true, x, y, z) -> y if(false, x, y, z) -> facIter(x, z) factorial(x) -> facIter(x, s(0)) 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: plus(0', x) -> x plus(s(x), y) -> s(plus(x, y)) times(0', y) -> 0' times(s(x), y) -> plus(y, times(x, y)) p(s(x)) -> x p(0') -> 0' minus(x, 0') -> x minus(0', x) -> 0' minus(x, s(y)) -> p(minus(x, y)) isZero(0') -> true isZero(s(x)) -> false facIter(x, y) -> if(isZero(x), minus(x, s(0')), y, times(y, x)) if(true, x, y, z) -> y if(false, x, y, z) -> facIter(x, z) factorial(x) -> facIter(x, s(0')) 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: plus(0, x) -> x plus(s(x), y) -> s(plus(x, y)) times(0, y) -> 0 times(s(x), y) -> plus(y, times(x, y)) p(s(x)) -> x p(0) -> 0 minus(x, 0) -> x minus(0, x) -> 0 minus(x, s(y)) -> p(minus(x, y)) isZero(0) -> true isZero(s(x)) -> false facIter(x, y) -> if(isZero(x), minus(x, s(0)), y, times(y, x)) if(true, x, y, z) -> y if(false, x, y, z) -> facIter(x, z) factorial(x) -> facIter(x, s(0)) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (5) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0) -> 0 minus(z0, 0) -> z0 minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) Tuples: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0, z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0) -> c5 MINUS(z0, 0) -> c6 MINUS(0, z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0) -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0))) S tuples: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0, z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0) -> c5 MINUS(z0, 0) -> c6 MINUS(0, z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0) -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0))) K tuples:none Defined Rule Symbols: plus_2, times_2, p_1, minus_2, isZero_1, facIter_2, if_4, factorial_1 Defined Pair Symbols: PLUS_2, TIMES_2, P_1, MINUS_2, ISZERO_1, FACITER_2, IF_4, FACTORIAL_1 Compound Symbols: c, c1_1, c2, c3_2, c4, c5, c6, c7, c8_2, c9, c10, c11_2, c12_2, c13_2, c14, c15_1, c16_1 ---------------------------------------- (7) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (8) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0, z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0) -> c5 MINUS(z0, 0) -> c6 MINUS(0, z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0) -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0))) The (relative) TRS S consists of the following rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0) -> 0 minus(z0, 0) -> z0 minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) Rewrite Strategy: INNERMOST ---------------------------------------- (9) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (10) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) The (relative) TRS S consists of the following rules: plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Rewrite Strategy: INNERMOST ---------------------------------------- (11) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (12) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 ---------------------------------------- (13) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: PLUS, TIMES, times, MINUS, minus, FACITER, plus, facIter They will be analysed ascendingly in the following order: PLUS < TIMES times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (14) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: PLUS, TIMES, times, MINUS, minus, FACITER, plus, facIter They will be analysed ascendingly in the following order: PLUS < TIMES times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) Induction Base: PLUS(gen_0':s12_17(0), gen_0':s12_17(b)) ->_R^Omega(1) c Induction Step: PLUS(gen_0':s12_17(+(n16_17, 1)), gen_0':s12_17(b)) ->_R^Omega(1) c1(PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b))) ->_IH c1(gen_c:c111_17(c17_17)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (16) Complex Obligation (BEST) ---------------------------------------- (17) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: PLUS, TIMES, times, MINUS, minus, FACITER, plus, facIter They will be analysed ascendingly in the following order: PLUS < TIMES times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (18) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (19) BOUNDS(n^1, INF) ---------------------------------------- (20) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: minus, TIMES, times, MINUS, FACITER, plus, facIter They will be analysed ascendingly in the following order: times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) Induction Base: minus(gen_0':s12_17(a), gen_0':s12_17(+(1, 0))) Induction Step: minus(gen_0':s12_17(a), gen_0':s12_17(+(1, +(n747_17, 1)))) ->_R^Omega(0) p(minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17)))) ->_IH p(*15_17) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (22) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: MINUS, TIMES, times, FACITER, plus, facIter They will be analysed ascendingly in the following order: times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter MINUS < FACITER ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) Induction Base: plus(gen_0':s12_17(0), gen_0':s12_17(b)) ->_R^Omega(0) gen_0':s12_17(b) Induction Step: plus(gen_0':s12_17(+(n10714_17, 1)), gen_0':s12_17(b)) ->_R^Omega(0) s(plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b))) ->_IH s(gen_0':s12_17(+(b, c10715_17))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (24) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: times, TIMES, FACITER, facIter They will be analysed ascendingly in the following order: times < TIMES TIMES < FACITER times < FACITER times < facIter ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) Induction Base: times(gen_0':s12_17(0), gen_0':s12_17(b)) ->_R^Omega(0) 0' Induction Step: times(gen_0':s12_17(+(n12294_17, 1)), gen_0':s12_17(b)) ->_R^Omega(0) plus(gen_0':s12_17(b), times(gen_0':s12_17(n12294_17), gen_0':s12_17(b))) ->_IH plus(gen_0':s12_17(b), gen_0':s12_17(*(c12295_17, b))) ->_L^Omega(0) gen_0':s12_17(+(b, *(n12294_17, b))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (26) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: TIMES, FACITER, facIter They will be analysed ascendingly in the following order: TIMES < FACITER ---------------------------------------- (27) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) Induction Base: TIMES(gen_0':s12_17(0), gen_0':s12_17(b)) Induction Step: TIMES(gen_0':s12_17(+(n15292_17, 1)), gen_0':s12_17(b)) ->_R^Omega(1) c3(PLUS(gen_0':s12_17(b), times(gen_0':s12_17(n15292_17), gen_0':s12_17(b))), TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b))) ->_L^Omega(0) c3(PLUS(gen_0':s12_17(b), gen_0':s12_17(*(n15292_17, b))), TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b))) ->_L^Omega(1 + b) c3(gen_c:c111_17(b), TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(*(n15292_17, b)))) ->_IH c3(gen_c:c111_17(*(n15292_17, b)), *15_17) We have rt in Omega(n^2) and sz in O(n). Thus, we have irc_R in Omega(n^2). ---------------------------------------- (28) Complex Obligation (BEST) ---------------------------------------- (29) Obligation: Proved the lower bound n^2 for the following obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: TIMES, FACITER, facIter They will be analysed ascendingly in the following order: TIMES < FACITER ---------------------------------------- (30) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (31) BOUNDS(n^2, INF) ---------------------------------------- (32) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: FACITER, facIter ---------------------------------------- (33) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: FACITER(gen_0':s12_17(n44219_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(n44219_17 + n44219_17^2 + n44219_17^3) Induction Base: FACITER(gen_0':s12_17(0), gen_0':s12_17(b)) Induction Step: FACITER(gen_0':s12_17(+(n44219_17, 1)), gen_0':s12_17(b)) ->_R^Omega(1) c13(IF(isZero(gen_0':s12_17(+(n44219_17, 1))), minus(gen_0':s12_17(+(n44219_17, 1)), s(0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(n44219_17, 1)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(n44219_17, 1)))) ->_R^Omega(0) c13(IF(false, minus(gen_0':s12_17(+(1, n44219_17)), s(0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(0) c13(IF(false, p(minus(gen_0':s12_17(+(1, n44219_17)), 0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(0) c13(IF(false, p(gen_0':s12_17(+(1, n44219_17))), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(0) c13(IF(false, gen_0':s12_17(n44219_17), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_L^Omega(0) c13(IF(false, gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(*(b, +(1, n44219_17)))), TIMES(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(1) c13(c15(FACITER(gen_0':s12_17(n44219_17), gen_0':s12_17(+(b, *(b, n44219_17))))), TIMES(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(+(1, n44219_17)))) ->_IH c13(c15(*15_17), TIMES(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(1) c13(c15(*15_17), c3(PLUS(gen_0':s12_17(+(1, n44219_17)), times(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17))))) ->_L^Omega(0) c13(c15(*15_17), c3(PLUS(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(*(n44219_17, +(1, n44219_17)))), TIMES(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17))))) ->_L^Omega(2 + n44219_17) c13(c15(*15_17), c3(gen_c:c111_17(+(1, n44219_17)), TIMES(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17))))) ->_L^Omega(2*n44219_17 + n44219_17^2) c13(c15(*15_17), c3(gen_c:c111_17(+(1, n44219_17)), *15_17)) We have rt in Omega(n^3) and sz in O(n). Thus, we have irc_R in Omega(n^3). ---------------------------------------- (34) Complex Obligation (BEST) ---------------------------------------- (35) Obligation: Proved the lower bound n^3 for the following obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: FACITER, facIter ---------------------------------------- (36) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (37) BOUNDS(n^3, INF) ---------------------------------------- (38) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) FACITER(gen_0':s12_17(n44219_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(n44219_17 + n44219_17^2 + n44219_17^3) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: facIter ---------------------------------------- (39) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: facIter(gen_0':s12_17(n87718_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(0) Induction Base: facIter(gen_0':s12_17(0), gen_0':s12_17(b)) Induction Step: facIter(gen_0':s12_17(+(n87718_17, 1)), gen_0':s12_17(b)) ->_R^Omega(0) if(isZero(gen_0':s12_17(+(n87718_17, 1))), minus(gen_0':s12_17(+(n87718_17, 1)), s(0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(n87718_17, 1)))) ->_R^Omega(0) if(false, minus(gen_0':s12_17(+(1, n87718_17)), s(0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n87718_17)))) ->_R^Omega(0) if(false, p(minus(gen_0':s12_17(+(1, n87718_17)), 0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n87718_17)))) ->_R^Omega(0) if(false, p(gen_0':s12_17(+(1, n87718_17))), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n87718_17)))) ->_R^Omega(0) if(false, gen_0':s12_17(n87718_17), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n87718_17)))) ->_L^Omega(0) if(false, gen_0':s12_17(n87718_17), gen_0':s12_17(+(1, n87718_17)), gen_0':s12_17(*(b, +(1, n87718_17)))) ->_R^Omega(0) facIter(gen_0':s12_17(n87718_17), gen_0':s12_17(+(b, *(b, n87718_17)))) ->_IH *15_17 We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (40) BOUNDS(1, INF) ---------------------------------------- (41) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (42) 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: plus(0, x) -> x [1] plus(s(x), y) -> s(plus(x, y)) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] p(s(x)) -> x [1] p(0) -> 0 [1] minus(x, 0) -> x [1] minus(0, x) -> 0 [1] minus(x, s(y)) -> p(minus(x, y)) [1] isZero(0) -> true [1] isZero(s(x)) -> false [1] facIter(x, y) -> if(isZero(x), minus(x, s(0)), y, times(y, x)) [1] if(true, x, y, z) -> y [1] if(false, x, y, z) -> facIter(x, z) [1] factorial(x) -> facIter(x, s(0)) [1] Rewrite Strategy: INNERMOST ---------------------------------------- (43) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (44) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: plus(0, x) -> x [1] plus(s(x), y) -> s(plus(x, y)) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] p(s(x)) -> x [1] p(0) -> 0 [1] minus(x, 0) -> x [1] minus(0, x) -> 0 [1] minus(x, s(y)) -> p(minus(x, y)) [1] isZero(0) -> true [1] isZero(s(x)) -> false [1] facIter(x, y) -> if(isZero(x), minus(x, s(0)), y, times(y, x)) [1] if(true, x, y, z) -> y [1] if(false, x, y, z) -> facIter(x, z) [1] factorial(x) -> facIter(x, s(0)) [1] The TRS has the following type information: plus :: 0:s -> 0:s -> 0:s 0 :: 0:s s :: 0:s -> 0:s times :: 0:s -> 0:s -> 0:s p :: 0:s -> 0:s minus :: 0:s -> 0:s -> 0:s isZero :: 0:s -> true:false true :: true:false false :: true:false facIter :: 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s factorial :: 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (45) 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: facIter_2 if_4 factorial_1 (c) The following functions are completely defined: times_2 isZero_1 minus_2 plus_2 p_1 Due to the following rules being added: none And the following fresh constants: none ---------------------------------------- (46) 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: plus(0, x) -> x [1] plus(s(x), y) -> s(plus(x, y)) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] p(s(x)) -> x [1] p(0) -> 0 [1] minus(x, 0) -> x [1] minus(0, x) -> 0 [1] minus(x, s(y)) -> p(minus(x, y)) [1] isZero(0) -> true [1] isZero(s(x)) -> false [1] facIter(x, y) -> if(isZero(x), minus(x, s(0)), y, times(y, x)) [1] if(true, x, y, z) -> y [1] if(false, x, y, z) -> facIter(x, z) [1] factorial(x) -> facIter(x, s(0)) [1] The TRS has the following type information: plus :: 0:s -> 0:s -> 0:s 0 :: 0:s s :: 0:s -> 0:s times :: 0:s -> 0:s -> 0:s p :: 0:s -> 0:s minus :: 0:s -> 0:s -> 0:s isZero :: 0:s -> true:false true :: true:false false :: true:false facIter :: 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s factorial :: 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (47) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (48) 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: plus(0, x) -> x [1] plus(s(x), y) -> s(plus(x, y)) [1] times(0, y) -> 0 [1] times(s(0), y) -> plus(y, 0) [2] times(s(s(x')), y) -> plus(y, plus(y, times(x', y))) [2] p(s(x)) -> x [1] p(0) -> 0 [1] minus(x, 0) -> x [1] minus(0, x) -> 0 [1] minus(x, s(0)) -> p(x) [2] minus(0, s(y)) -> p(0) [2] minus(x, s(s(y'))) -> p(p(minus(x, y'))) [2] isZero(0) -> true [1] isZero(s(x)) -> false [1] facIter(0, 0) -> if(true, 0, 0, 0) [4] facIter(0, s(x1)) -> if(true, 0, s(x1), plus(0, times(x1, 0))) [4] facIter(0, 0) -> if(true, p(minus(0, 0)), 0, 0) [4] facIter(0, s(x2)) -> if(true, p(minus(0, 0)), s(x2), plus(0, times(x2, 0))) [4] facIter(s(x''), 0) -> if(false, p(minus(s(x''), 0)), 0, 0) [4] facIter(s(x''), s(x3)) -> if(false, p(minus(s(x''), 0)), s(x3), plus(s(x''), times(x3, s(x'')))) [4] if(true, x, y, z) -> y [1] if(false, x, y, z) -> facIter(x, z) [1] factorial(x) -> facIter(x, s(0)) [1] The TRS has the following type information: plus :: 0:s -> 0:s -> 0:s 0 :: 0:s s :: 0:s -> 0:s times :: 0:s -> 0:s -> 0:s p :: 0:s -> 0:s minus :: 0:s -> 0:s -> 0:s isZero :: 0:s -> true:false true :: true:false false :: true:false facIter :: 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s factorial :: 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (49) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 1 false => 0 ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + x2, plus(0, times(x2, 0))) :|: z'' = 1 + x2, x2 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + x1, plus(0, times(x1, 0))) :|: x1 >= 0, z'' = 1 + x1, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + x'', 0)), 0, 0) :|: z'' = 0, z' = 1 + x'', x'' >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + x'', 0)), 1 + x3, plus(1 + x'', times(x3, 1 + x''))) :|: z' = 1 + x'', z'' = 1 + x3, x'' >= 0, x3 >= 0 factorial(z') -{ 1 }-> facIter(x, 1 + 0) :|: z' = x, x >= 0 if(z', z'', z1, z2) -{ 1 }-> y :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(x, z) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' = 1 + x, x >= 0 minus(z', z'') -{ 1 }-> x :|: z'' = 0, z' = x, x >= 0 minus(z', z'') -{ 2 }-> p(x) :|: z' = x, x >= 0, z'' = 1 + 0 minus(z', z'') -{ 2 }-> p(p(minus(x, y'))) :|: z' = x, x >= 0, z'' = 1 + (1 + y'), y' >= 0 minus(z', z'') -{ 2 }-> p(0) :|: y >= 0, z'' = 1 + y, z' = 0 minus(z', z'') -{ 1 }-> 0 :|: x >= 0, z'' = x, z' = 0 p(z') -{ 1 }-> x :|: z' = 1 + x, x >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 plus(z', z'') -{ 1 }-> x :|: x >= 0, z'' = x, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(x, y) :|: z' = 1 + x, z'' = y, x >= 0, y >= 0 times(z', z'') -{ 2 }-> plus(y, plus(y, times(x', y))) :|: z' = 1 + (1 + x'), z'' = y, x' >= 0, y >= 0 times(z', z'') -{ 2 }-> plus(y, 0) :|: z'' = y, y >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' = y, y >= 0, z' = 0 ---------------------------------------- (51) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> x :|: z' = 1 + x, x >= 0 ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + x2, plus(0, times(x2, 0))) :|: z'' = 1 + x2, x2 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + x1, plus(0, times(x1, 0))) :|: x1 >= 0, z'' = 1 + x1, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + x'', 0)), 0, 0) :|: z'' = 0, z' = 1 + x'', x'' >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + x'', 0)), 1 + x3, plus(1 + x'', times(x3, 1 + x''))) :|: z' = 1 + x'', z'' = 1 + x3, x'' >= 0, x3 >= 0 factorial(z') -{ 1 }-> facIter(x, 1 + 0) :|: z' = x, x >= 0 if(z', z'', z1, z2) -{ 1 }-> y :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(x, z) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' = 1 + x, x >= 0 minus(z', z'') -{ 1 }-> x :|: z'' = 0, z' = x, x >= 0 minus(z', z'') -{ 3 }-> x' :|: z' = x, x >= 0, z'' = 1 + 0, x = 1 + x', x' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(x, y'))) :|: z' = x, x >= 0, z'' = 1 + (1 + y'), y' >= 0 minus(z', z'') -{ 1 }-> 0 :|: x >= 0, z'' = x, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' = x, x >= 0, z'' = 1 + 0, x = 0 minus(z', z'') -{ 3 }-> 0 :|: y >= 0, z'' = 1 + y, z' = 0, 0 = 0 p(z') -{ 1 }-> x :|: z' = 1 + x, x >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 plus(z', z'') -{ 1 }-> x :|: x >= 0, z'' = x, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(x, y) :|: z' = 1 + x, z'' = y, x >= 0, y >= 0 times(z', z'') -{ 2 }-> plus(y, plus(y, times(x', y))) :|: z' = 1 + (1 + x'), z'' = y, x' >= 0, y >= 0 times(z', z'') -{ 2 }-> plus(y, 0) :|: z'' = y, y >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' = y, y >= 0, z' = 0 ---------------------------------------- (53) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 ---------------------------------------- (55) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { isZero } { plus } { p } { times } { minus } { if, facIter } { factorial } ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {isZero}, {plus}, {p}, {times}, {minus}, {if,facIter}, {factorial} ---------------------------------------- (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: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {isZero}, {plus}, {p}, {times}, {minus}, {if,facIter}, {factorial} ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {isZero}, {plus}, {p}, {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: ?, size: O(1) [1] ---------------------------------------- (61) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {plus}, {p}, {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (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: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {plus}, {p}, {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' + z'' ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {plus}, {p}, {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: ?, size: O(n^1) [z' + z''] ---------------------------------------- (67) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z' ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(z' - 1, z'') :|: z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 2 }-> plus(z'', 0) :|: z'' >= 0, z' = 1 + 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {p}, {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: 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: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {p}, {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: p after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {p}, {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: ?, size: O(n^1) [z'] ---------------------------------------- (73) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] ---------------------------------------- (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: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] ---------------------------------------- (77) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2*z'*z'' + z'' ---------------------------------------- (78) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {times}, {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: ?, size: O(n^2) [2*z'*z'' + z''] ---------------------------------------- (79) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 4 + 4*z' + 2*z'*z'' + z'' ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 1 + (z'' - 1), plus(0, times(z'' - 1, 0))) :|: z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), plus(1 + (z' - 1), times(z'' - 1, 1 + (z' - 1)))) :|: z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 2 }-> plus(z'', plus(z'', times(z' - 2, z''))) :|: z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: O(n^2) [4 + 4*z' + 2*z'*z'' + z''], size: O(n^2) [2*z'*z'' + z''] ---------------------------------------- (81) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), s6) :|: s5 >= 0, s5 <= 0 + 2 * (0 * (z'' - 1)), s6 >= 0, s6 <= 0 + s5, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, 0, 1 + (z'' - 1), s4) :|: s3 >= 0, s3 <= 0 + 2 * (0 * (z'' - 1)), s4 >= 0, s4 <= 0 + s3, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 5 + 2*z'*z'' + 4*z'' }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), s8) :|: s7 >= 0, s7 <= 1 + (z' - 1) + 2 * ((1 + (z' - 1)) * (z'' - 1)), s8 >= 0, s8 <= 1 + (z' - 1) + s7, z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 4*z' + 2*z'*z'' + -1*z'' }-> s2 :|: s'' >= 0, s'' <= z'' + 2 * (z'' * (z' - 2)), s1 >= 0, s1 <= z'' + s'', s2 >= 0, s2 <= z'' + s1, z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: O(n^2) [4 + 4*z' + 2*z'*z'' + z''], size: O(n^2) [2*z'*z'' + z''] ---------------------------------------- (83) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: minus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (84) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), s6) :|: s5 >= 0, s5 <= 0 + 2 * (0 * (z'' - 1)), s6 >= 0, s6 <= 0 + s5, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, 0, 1 + (z'' - 1), s4) :|: s3 >= 0, s3 <= 0 + 2 * (0 * (z'' - 1)), s4 >= 0, s4 <= 0 + s3, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 5 + 2*z'*z'' + 4*z'' }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), s8) :|: s7 >= 0, s7 <= 1 + (z' - 1) + 2 * ((1 + (z' - 1)) * (z'' - 1)), s8 >= 0, s8 <= 1 + (z' - 1) + s7, z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 4*z' + 2*z'*z'' + -1*z'' }-> s2 :|: s'' >= 0, s'' <= z'' + 2 * (z'' * (z' - 2)), s1 >= 0, s1 <= z'' + s'', s2 >= 0, s2 <= z'' + s1, z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {minus}, {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: O(n^2) [4 + 4*z' + 2*z'*z'' + z''], size: O(n^2) [2*z'*z'' + z''] minus: runtime: ?, size: O(n^1) [z'] ---------------------------------------- (85) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: minus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + 4*z'' ---------------------------------------- (86) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 4 }-> if(1, p(minus(0, 0)), 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, p(minus(0, 0)), 1 + (z'' - 1), s6) :|: s5 >= 0, s5 <= 0 + 2 * (0 * (z'' - 1)), s6 >= 0, s6 <= 0 + s5, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, 0, 1 + (z'' - 1), s4) :|: s3 >= 0, s3 <= 0 + 2 * (0 * (z'' - 1)), s4 >= 0, s4 <= 0 + s3, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(0, p(minus(1 + (z' - 1), 0)), 0, 0) :|: z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 5 + 2*z'*z'' + 4*z'' }-> if(0, p(minus(1 + (z' - 1), 0)), 1 + (z'' - 1), s8) :|: s7 >= 0, s7 <= 1 + (z' - 1) + 2 * ((1 + (z' - 1)) * (z'' - 1)), s8 >= 0, s8 <= 1 + (z' - 1) + s7, z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 2 }-> p(p(minus(z', z'' - 2))) :|: z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 4*z' + 2*z'*z'' + -1*z'' }-> s2 :|: s'' >= 0, s'' <= z'' + 2 * (z'' * (z' - 2)), s1 >= 0, s1 <= z'' + s'', s2 >= 0, s2 <= z'' + s1, z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: O(n^2) [4 + 4*z' + 2*z'*z'' + z''], size: O(n^2) [2*z'*z'' + z''] minus: runtime: O(n^1) [7 + 4*z''], size: O(n^1) [z'] ---------------------------------------- (87) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (88) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 12 }-> if(1, s13, 0, 0) :|: s12 >= 0, s12 <= 0, s13 >= 0, s13 <= s12, z'' = 0, z' = 0 facIter(z', z'') -{ 13 + 4*z'' }-> if(1, s15, 1 + (z'' - 1), s6) :|: s14 >= 0, s14 <= 0, s15 >= 0, s15 <= s14, s5 >= 0, s5 <= 0 + 2 * (0 * (z'' - 1)), s6 >= 0, s6 <= 0 + s5, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, 0, 1 + (z'' - 1), s4) :|: s3 >= 0, s3 <= 0 + 2 * (0 * (z'' - 1)), s4 >= 0, s4 <= 0 + s3, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 12 }-> if(0, s17, 0, 0) :|: s16 >= 0, s16 <= 1 + (z' - 1), s17 >= 0, s17 <= s16, z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 13 + 2*z'*z'' + 4*z'' }-> if(0, s19, 1 + (z'' - 1), s8) :|: s18 >= 0, s18 <= 1 + (z' - 1), s19 >= 0, s19 <= s18, s7 >= 0, s7 <= 1 + (z' - 1) + 2 * ((1 + (z' - 1)) * (z'' - 1)), s8 >= 0, s8 <= 1 + (z' - 1) + s7, z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 3 + 4*z'' }-> s11 :|: s9 >= 0, s9 <= z', s10 >= 0, s10 <= s9, s11 >= 0, s11 <= s10, z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 4*z' + 2*z'*z'' + -1*z'' }-> s2 :|: s'' >= 0, s'' <= z'' + 2 * (z'' * (z' - 2)), s1 >= 0, s1 <= z'' + s'', s2 >= 0, s2 <= z'' + s1, z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: O(n^2) [4 + 4*z' + 2*z'*z'' + z''], size: O(n^2) [2*z'*z'' + z''] minus: runtime: O(n^1) [7 + 4*z''], size: O(n^1) [z'] ---------------------------------------- (89) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: facIter after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (90) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 12 }-> if(1, s13, 0, 0) :|: s12 >= 0, s12 <= 0, s13 >= 0, s13 <= s12, z'' = 0, z' = 0 facIter(z', z'') -{ 13 + 4*z'' }-> if(1, s15, 1 + (z'' - 1), s6) :|: s14 >= 0, s14 <= 0, s15 >= 0, s15 <= s14, s5 >= 0, s5 <= 0 + 2 * (0 * (z'' - 1)), s6 >= 0, s6 <= 0 + s5, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, 0, 1 + (z'' - 1), s4) :|: s3 >= 0, s3 <= 0 + 2 * (0 * (z'' - 1)), s4 >= 0, s4 <= 0 + s3, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 12 }-> if(0, s17, 0, 0) :|: s16 >= 0, s16 <= 1 + (z' - 1), s17 >= 0, s17 <= s16, z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 13 + 2*z'*z'' + 4*z'' }-> if(0, s19, 1 + (z'' - 1), s8) :|: s18 >= 0, s18 <= 1 + (z' - 1), s19 >= 0, s19 <= s18, s7 >= 0, s7 <= 1 + (z' - 1) + 2 * ((1 + (z' - 1)) * (z'' - 1)), s8 >= 0, s8 <= 1 + (z' - 1) + s7, z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 3 + 4*z'' }-> s11 :|: s9 >= 0, s9 <= z', s10 >= 0, s10 <= s9, s11 >= 0, s11 <= s10, z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 4*z' + 2*z'*z'' + -1*z'' }-> s2 :|: s'' >= 0, s'' <= z'' + 2 * (z'' * (z' - 2)), s1 >= 0, s1 <= z'' + s'', s2 >= 0, s2 <= z'' + s1, z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: O(n^2) [4 + 4*z' + 2*z'*z'' + z''], size: O(n^2) [2*z'*z'' + z''] minus: runtime: O(n^1) [7 + 4*z''], size: O(n^1) [z'] if: runtime: ?, size: INF facIter: runtime: ?, size: INF ---------------------------------------- (91) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (92) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 12 }-> if(1, s13, 0, 0) :|: s12 >= 0, s12 <= 0, s13 >= 0, s13 <= s12, z'' = 0, z' = 0 facIter(z', z'') -{ 13 + 4*z'' }-> if(1, s15, 1 + (z'' - 1), s6) :|: s14 >= 0, s14 <= 0, s15 >= 0, s15 <= s14, s5 >= 0, s5 <= 0 + 2 * (0 * (z'' - 1)), s6 >= 0, s6 <= 0 + s5, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 4 }-> if(1, 0, 0, 0) :|: z'' = 0, z' = 0 facIter(z', z'') -{ 5 + 4*z'' }-> if(1, 0, 1 + (z'' - 1), s4) :|: s3 >= 0, s3 <= 0 + 2 * (0 * (z'' - 1)), s4 >= 0, s4 <= 0 + s3, z'' - 1 >= 0, z' = 0 facIter(z', z'') -{ 12 }-> if(0, s17, 0, 0) :|: s16 >= 0, s16 <= 1 + (z' - 1), s17 >= 0, s17 <= s16, z'' = 0, z' - 1 >= 0 facIter(z', z'') -{ 13 + 2*z'*z'' + 4*z'' }-> if(0, s19, 1 + (z'' - 1), s8) :|: s18 >= 0, s18 <= 1 + (z' - 1), s19 >= 0, s19 <= s18, s7 >= 0, s7 <= 1 + (z' - 1) + 2 * ((1 + (z' - 1)) * (z'' - 1)), s8 >= 0, s8 <= 1 + (z' - 1) + s7, z' - 1 >= 0, z'' - 1 >= 0 factorial(z') -{ 1 }-> facIter(z', 1 + 0) :|: z' >= 0 if(z', z'', z1, z2) -{ 1 }-> z1 :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(z'', z2) :|: z2 >= 0, z'' >= 0, z1 >= 0, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' - 1 >= 0 minus(z', z'') -{ 3 + 4*z'' }-> s11 :|: s9 >= 0, s9 <= z', s10 >= 0, s10 <= s9, s11 >= 0, s11 <= s10, z' >= 0, z'' - 2 >= 0 minus(z', z'') -{ 1 }-> z' :|: z'' = 0, z' >= 0 minus(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z' >= 0, z'' = 1 + 0, z' = 0 minus(z', z'') -{ 3 }-> 0 :|: z'' - 1 >= 0, z' = 0, 0 = 0 minus(z', z'') -{ 3 }-> z' - 1 :|: z' >= 0, z'' = 1 + 0, z' - 1 >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 p(z') -{ 1 }-> z' - 1 :|: z' - 1 >= 0 plus(z', z'') -{ 1 }-> z'' :|: z'' >= 0, z' = 0 plus(z', z'') -{ 1 + z' }-> 1 + s :|: s >= 0, s <= z' - 1 + z'', z' - 1 >= 0, z'' >= 0 times(z', z'') -{ 3 + z'' }-> s' :|: s' >= 0, s' <= z'' + 0, z'' >= 0, z' = 1 + 0 times(z', z'') -{ 4*z' + 2*z'*z'' + -1*z'' }-> s2 :|: s'' >= 0, s'' <= z'' + 2 * (z'' * (z' - 2)), s1 >= 0, s1 <= z'' + s'', s2 >= 0, s2 <= z'' + s1, z' - 2 >= 0, z'' >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' >= 0, z' = 0 Function symbols to be analyzed: {if,facIter}, {factorial} Previous analysis results are: isZero: runtime: O(1) [1], size: O(1) [1] plus: runtime: O(n^1) [1 + z'], size: O(n^1) [z' + z''] p: runtime: O(1) [1], size: O(n^1) [z'] times: runtime: O(n^2) [4 + 4*z' + 2*z'*z'' + z''], size: O(n^2) [2*z'*z'' + z''] minus: runtime: O(n^1) [7 + 4*z''], size: O(n^1) [z'] if: runtime: INF, size: INF facIter: runtime: ?, size: INF ---------------------------------------- (93) 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: none And the following fresh constants: none ---------------------------------------- (94) 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: plus(0, x) -> x [1] plus(s(x), y) -> s(plus(x, y)) [1] times(0, y) -> 0 [1] times(s(x), y) -> plus(y, times(x, y)) [1] p(s(x)) -> x [1] p(0) -> 0 [1] minus(x, 0) -> x [1] minus(0, x) -> 0 [1] minus(x, s(y)) -> p(minus(x, y)) [1] isZero(0) -> true [1] isZero(s(x)) -> false [1] facIter(x, y) -> if(isZero(x), minus(x, s(0)), y, times(y, x)) [1] if(true, x, y, z) -> y [1] if(false, x, y, z) -> facIter(x, z) [1] factorial(x) -> facIter(x, s(0)) [1] The TRS has the following type information: plus :: 0:s -> 0:s -> 0:s 0 :: 0:s s :: 0:s -> 0:s times :: 0:s -> 0:s -> 0:s p :: 0:s -> 0:s minus :: 0:s -> 0:s -> 0:s isZero :: 0:s -> true:false true :: true:false false :: true:false facIter :: 0:s -> 0:s -> 0:s if :: true:false -> 0:s -> 0:s -> 0:s -> 0:s factorial :: 0:s -> 0:s Rewrite Strategy: INNERMOST ---------------------------------------- (95) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 true => 1 false => 0 ---------------------------------------- (96) Obligation: Complexity RNTS consisting of the following rules: facIter(z', z'') -{ 1 }-> if(isZero(x), minus(x, 1 + 0), y, times(y, x)) :|: z' = x, z'' = y, x >= 0, y >= 0 factorial(z') -{ 1 }-> facIter(x, 1 + 0) :|: z' = x, x >= 0 if(z', z'', z1, z2) -{ 1 }-> y :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 1 if(z', z'', z1, z2) -{ 1 }-> facIter(x, z) :|: z1 = y, z >= 0, z2 = z, x >= 0, y >= 0, z'' = x, z' = 0 isZero(z') -{ 1 }-> 1 :|: z' = 0 isZero(z') -{ 1 }-> 0 :|: z' = 1 + x, x >= 0 minus(z', z'') -{ 1 }-> x :|: z'' = 0, z' = x, x >= 0 minus(z', z'') -{ 1 }-> p(minus(x, y)) :|: z' = x, x >= 0, y >= 0, z'' = 1 + y minus(z', z'') -{ 1 }-> 0 :|: x >= 0, z'' = x, z' = 0 p(z') -{ 1 }-> x :|: z' = 1 + x, x >= 0 p(z') -{ 1 }-> 0 :|: z' = 0 plus(z', z'') -{ 1 }-> x :|: x >= 0, z'' = x, z' = 0 plus(z', z'') -{ 1 }-> 1 + plus(x, y) :|: z' = 1 + x, z'' = y, x >= 0, y >= 0 times(z', z'') -{ 1 }-> plus(y, times(x, y)) :|: z' = 1 + x, z'' = y, x >= 0, y >= 0 times(z', z'') -{ 1 }-> 0 :|: z'' = y, y >= 0, z' = 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (97) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (98) Obligation: Complexity Dependency Tuples Problem Rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0) -> 0 minus(z0, 0) -> z0 minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) Tuples: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0, z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0) -> c5 MINUS(z0, 0) -> c6 MINUS(0, z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0) -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0))) S tuples: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0, z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0) -> c5 MINUS(z0, 0) -> c6 MINUS(0, z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0) -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0))) K tuples:none Defined Rule Symbols: plus_2, times_2, p_1, minus_2, isZero_1, facIter_2, if_4, factorial_1 Defined Pair Symbols: PLUS_2, TIMES_2, P_1, MINUS_2, ISZERO_1, FACITER_2, IF_4, FACTORIAL_1 Compound Symbols: c, c1_1, c2, c3_2, c4, c5, c6, c7, c8_2, c9, c10, c11_2, c12_2, c13_2, c14, c15_1, c16_1 ---------------------------------------- (99) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: FACTORIAL(z0) -> c16(FACITER(z0, s(0))) Removed 9 trailing nodes: ISZERO(s(z0)) -> c10 P(s(z0)) -> c4 MINUS(z0, 0) -> c6 IF(true, z0, z1, z2) -> c14 ISZERO(0) -> c9 MINUS(0, z0) -> c7 TIMES(0, z0) -> c2 PLUS(0, z0) -> c P(0) -> c5 ---------------------------------------- (100) Obligation: Complexity Dependency Tuples Problem Rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0) -> 0 minus(z0, 0) -> z0 minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) K tuples:none Defined Rule Symbols: plus_2, times_2, p_1, minus_2, isZero_1, facIter_2, if_4, factorial_1 Defined Pair Symbols: PLUS_2, TIMES_2, MINUS_2, FACITER_2, IF_4 Compound Symbols: c1_1, c3_2, c8_2, c11_2, c12_2, c13_2, c15_1 ---------------------------------------- (101) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (102) Obligation: Complexity Dependency Tuples Problem Rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0) -> 0 minus(z0, 0) -> z0 minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) K tuples:none Defined Rule Symbols: plus_2, times_2, p_1, minus_2, isZero_1, facIter_2, if_4, factorial_1 Defined Pair Symbols: PLUS_2, TIMES_2, FACITER_2, IF_4, MINUS_2 Compound Symbols: c1_1, c3_2, c12_2, c13_2, c15_1, c8_1, c11_1 ---------------------------------------- (103) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) ---------------------------------------- (104) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) K tuples:none Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, FACITER_2, IF_4, MINUS_2 Compound Symbols: c1_1, c3_2, c12_2, c13_2, c15_1, c8_1, c11_1 ---------------------------------------- (105) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (106) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) The (relative) TRS S consists of the following rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Rewrite Strategy: INNERMOST ---------------------------------------- (107) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (108) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (109) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (110) 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: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) [1] TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) [1] FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) [1] FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) [1] IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) [1] MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) [1] FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) [1] times(0, z0) -> 0 [0] times(s(z0), z1) -> plus(z1, times(z0, z1)) [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] isZero(0) -> true [0] isZero(s(z0)) -> false [0] minus(0, z0) -> 0 [0] minus(z0, s(z1)) -> p(minus(z0, z1)) [0] minus(z0, 0) -> z0 [0] p(s(z0)) -> z0 [0] p(0) -> 0 [0] Rewrite Strategy: INNERMOST ---------------------------------------- (111) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (112) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) [1] TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) [1] FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) [1] FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) [1] IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) [1] MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) [1] FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) [1] times(0, z0) -> 0 [0] times(s(z0), z1) -> plus(z1, times(z0, z1)) [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] isZero(0) -> true [0] isZero(s(z0)) -> false [0] minus(0, z0) -> 0 [0] minus(z0, s(z1)) -> p(minus(z0, z1)) [0] minus(z0, 0) -> z0 [0] p(s(z0)) -> z0 [0] p(0) -> 0 [0] The TRS has the following type information: PLUS :: s:0 -> s:0 -> c1 s :: s:0 -> s:0 c1 :: c1 -> c1 TIMES :: s:0 -> s:0 -> c3 c3 :: c1 -> c3 -> c3 times :: s:0 -> s:0 -> s:0 FACITER :: s:0 -> s:0 -> c12:c13:c11 c12 :: c15 -> c8 -> c12:c13:c11 IF :: false:true -> s:0 -> s:0 -> s:0 -> c15 isZero :: s:0 -> false:true minus :: s:0 -> s:0 -> s:0 0 :: s:0 MINUS :: s:0 -> s:0 -> c8 c13 :: c15 -> c3 -> c12:c13:c11 false :: false:true c15 :: c12:c13:c11 -> c15 c8 :: c8 -> c8 c11 :: c15 -> c12:c13:c11 plus :: s:0 -> s:0 -> s:0 true :: false:true p :: s:0 -> s:0 Rewrite Strategy: INNERMOST ---------------------------------------- (113) 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: PLUS_2 TIMES_2 FACITER_2 IF_4 MINUS_2 (c) The following functions are completely defined: times_2 plus_2 isZero_1 minus_2 p_1 Due to the following rules being added: times(v0, v1) -> 0 [0] plus(v0, v1) -> 0 [0] isZero(v0) -> null_isZero [0] minus(v0, v1) -> 0 [0] p(v0) -> 0 [0] And the following fresh constants: null_isZero, const, const1, const2, const3, const4 ---------------------------------------- (114) 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: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) [1] TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) [1] FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) [1] FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) [1] IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) [1] MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) [1] FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) [1] times(0, z0) -> 0 [0] times(s(z0), z1) -> plus(z1, times(z0, z1)) [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] isZero(0) -> true [0] isZero(s(z0)) -> false [0] minus(0, z0) -> 0 [0] minus(z0, s(z1)) -> p(minus(z0, z1)) [0] minus(z0, 0) -> z0 [0] p(s(z0)) -> z0 [0] p(0) -> 0 [0] times(v0, v1) -> 0 [0] plus(v0, v1) -> 0 [0] isZero(v0) -> null_isZero [0] minus(v0, v1) -> 0 [0] p(v0) -> 0 [0] The TRS has the following type information: PLUS :: s:0 -> s:0 -> c1 s :: s:0 -> s:0 c1 :: c1 -> c1 TIMES :: s:0 -> s:0 -> c3 c3 :: c1 -> c3 -> c3 times :: s:0 -> s:0 -> s:0 FACITER :: s:0 -> s:0 -> c12:c13:c11 c12 :: c15 -> c8 -> c12:c13:c11 IF :: false:true:null_isZero -> s:0 -> s:0 -> s:0 -> c15 isZero :: s:0 -> false:true:null_isZero minus :: s:0 -> s:0 -> s:0 0 :: s:0 MINUS :: s:0 -> s:0 -> c8 c13 :: c15 -> c3 -> c12:c13:c11 false :: false:true:null_isZero c15 :: c12:c13:c11 -> c15 c8 :: c8 -> c8 c11 :: c15 -> c12:c13:c11 plus :: s:0 -> s:0 -> s:0 true :: false:true:null_isZero p :: s:0 -> s:0 null_isZero :: false:true:null_isZero const :: c1 const1 :: c3 const2 :: c12:c13:c11 const3 :: c15 const4 :: c8 Rewrite Strategy: INNERMOST ---------------------------------------- (115) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (116) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) [1] TIMES(s(0), z1) -> c3(PLUS(z1, 0), TIMES(0, z1)) [1] TIMES(s(s(z0')), z1) -> c3(PLUS(z1, plus(z1, times(z0', z1))), TIMES(s(z0'), z1)) [1] TIMES(s(z0), z1) -> c3(PLUS(z1, 0), TIMES(z0, z1)) [1] FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) [1] FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) [1] IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) [1] MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) [1] FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) [1] times(0, z0) -> 0 [0] times(s(0), z1) -> plus(z1, 0) [0] times(s(s(z027)), z1) -> plus(z1, plus(z1, times(z027, z1))) [0] times(s(z0), z1) -> plus(z1, 0) [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] isZero(0) -> true [0] isZero(s(z0)) -> false [0] minus(0, z0) -> 0 [0] minus(0, s(z1)) -> p(0) [0] minus(z0, s(s(z1'))) -> p(p(minus(z0, z1'))) [0] minus(z0, s(0)) -> p(z0) [0] minus(z0, s(z1)) -> p(0) [0] minus(z0, 0) -> z0 [0] p(s(z0)) -> z0 [0] p(0) -> 0 [0] times(v0, v1) -> 0 [0] plus(v0, v1) -> 0 [0] isZero(v0) -> null_isZero [0] minus(v0, v1) -> 0 [0] p(v0) -> 0 [0] The TRS has the following type information: PLUS :: s:0 -> s:0 -> c1 s :: s:0 -> s:0 c1 :: c1 -> c1 TIMES :: s:0 -> s:0 -> c3 c3 :: c1 -> c3 -> c3 times :: s:0 -> s:0 -> s:0 FACITER :: s:0 -> s:0 -> c12:c13:c11 c12 :: c15 -> c8 -> c12:c13:c11 IF :: false:true:null_isZero -> s:0 -> s:0 -> s:0 -> c15 isZero :: s:0 -> false:true:null_isZero minus :: s:0 -> s:0 -> s:0 0 :: s:0 MINUS :: s:0 -> s:0 -> c8 c13 :: c15 -> c3 -> c12:c13:c11 false :: false:true:null_isZero c15 :: c12:c13:c11 -> c15 c8 :: c8 -> c8 c11 :: c15 -> c12:c13:c11 plus :: s:0 -> s:0 -> s:0 true :: false:true:null_isZero p :: s:0 -> s:0 null_isZero :: false:true:null_isZero const :: c1 const1 :: c3 const2 :: c12:c13:c11 const3 :: c15 const4 :: c8 Rewrite Strategy: INNERMOST ---------------------------------------- (117) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 false => 1 true => 2 null_isZero => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 const4 => 0 ---------------------------------------- (118) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(isZero(z0), minus(z0, 1 + 0), z1, times(z1, z0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(isZero(z0), minus(z0, 1 + 0), z1, times(z1, z0)) + TIMES(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(isZero(z0), minus(z0, 1 + 0), z1, times(z1, z0)) + MINUS(z0, 1 + 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z0, z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 MINUS(z, z') -{ 1 }-> 1 + MINUS(z0, z1) :|: z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z1, plus(z1, times(z0', z1))) + TIMES(1 + z0', z1) :|: z1 >= 0, z = 1 + (1 + z0'), z0' >= 0, z' = z1 TIMES(z, z') -{ 1 }-> 1 + PLUS(z1, 0) + TIMES(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z1, 0) + TIMES(0, z1) :|: z1 >= 0, z = 1 + 0, z' = z1 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + z0, z0 >= 0 isZero(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 minus(z, z') -{ 0 }-> z0 :|: z = z0, z0 >= 0, z' = 0 minus(z, z') -{ 0 }-> p(z0) :|: z = z0, z' = 1 + 0, z0 >= 0 minus(z, z') -{ 0 }-> p(p(minus(z0, z1'))) :|: z' = 1 + (1 + z1'), z = z0, z1' >= 0, z0 >= 0 minus(z, z') -{ 0 }-> p(0) :|: z1 >= 0, z = 0, z' = 1 + z1 minus(z, z') -{ 0 }-> p(0) :|: z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1 minus(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 minus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 p(z) -{ 0 }-> z0 :|: z = 1 + z0, z0 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 plus(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> 1 + plus(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> plus(z1, plus(z1, times(z027, z1))) :|: z1 >= 0, z027 >= 0, z' = z1, z = 1 + (1 + z027) times(z, z') -{ 0 }-> plus(z1, 0) :|: z1 >= 0, z = 1 + 0, z' = z1 times(z, z') -{ 0 }-> plus(z1, 0) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ---------------------------------------- (119) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: isZero(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 isZero(z) -{ 0 }-> 1 :|: z = 1 + z0, z0 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 p(z) -{ 0 }-> z0 :|: z = 1 + z0, z0 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ---------------------------------------- (120) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z0, 1 + 0), z1, times(z1, z0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z0 = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z0, 1 + 0), z1, times(z1, z0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z0 = 1 + z0', z0' >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z0, 1 + 0), z1, times(z1, z0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, v0 >= 0, z0 = v0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z0, 1 + 0), z1, times(z1, z0)) + TIMES(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z0 = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z0, 1 + 0), z1, times(z1, z0)) + MINUS(z0, 1 + 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z0 = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z0, 1 + 0), z1, times(z1, z0)) + TIMES(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z0 = 1 + z0', z0' >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z0, 1 + 0), z1, times(z1, z0)) + MINUS(z0, 1 + 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z0 = 1 + z0', z0' >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z0, 1 + 0), z1, times(z1, z0)) + TIMES(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, v0 >= 0, z0 = v0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z0, 1 + 0), z1, times(z1, z0)) + MINUS(z0, 1 + 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, v0 >= 0, z0 = v0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z0, z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 MINUS(z, z') -{ 1 }-> 1 + MINUS(z0, z1) :|: z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z1, plus(z1, times(z0', z1))) + TIMES(1 + z0', z1) :|: z1 >= 0, z = 1 + (1 + z0'), z0' >= 0, z' = z1 TIMES(z, z') -{ 1 }-> 1 + PLUS(z1, 0) + TIMES(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z1, 0) + TIMES(0, z1) :|: z1 >= 0, z = 1 + 0, z' = z1 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + z0, z0 >= 0 isZero(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 minus(z, z') -{ 0 }-> z0 :|: z = z0, z0 >= 0, z' = 0 minus(z, z') -{ 0 }-> z0' :|: z = z0, z' = 1 + 0, z0 >= 0, z0 = 1 + z0', z0' >= 0 minus(z, z') -{ 0 }-> p(p(minus(z0, z1'))) :|: z' = 1 + (1 + z1'), z = z0, z1' >= 0, z0 >= 0 minus(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 minus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 minus(z, z') -{ 0 }-> 0 :|: z1 >= 0, z = 0, z' = 1 + z1, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z1 >= 0, z = 0, z' = 1 + z1, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z = z0, z' = 1 + 0, z0 >= 0, z0 = 0 minus(z, z') -{ 0 }-> 0 :|: z = z0, z' = 1 + 0, z0 >= 0, v0 >= 0, z0 = v0 minus(z, z') -{ 0 }-> 0 :|: z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1, v0 >= 0, 0 = v0 p(z) -{ 0 }-> z0 :|: z = 1 + z0, z0 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 plus(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> 1 + plus(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> plus(z1, plus(z1, times(z027, z1))) :|: z1 >= 0, z027 >= 0, z' = z1, z = 1 + (1 + z027) times(z, z') -{ 0 }-> plus(z1, 0) :|: z1 >= 0, z = 1 + 0, z' = z1 times(z, z') -{ 0 }-> plus(z1, 0) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ---------------------------------------- (121) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (122) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 ---------------------------------------- (123) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { isZero } { PLUS } { plus } { p } { MINUS } { times } { minus } { TIMES } { FACITER, IF } ---------------------------------------- (124) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {isZero}, {PLUS}, {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} ---------------------------------------- (125) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (126) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {isZero}, {PLUS}, {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} ---------------------------------------- (127) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (128) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {isZero}, {PLUS}, {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: ?, size: O(1) [2] ---------------------------------------- (129) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: isZero after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (130) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {PLUS}, {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (131) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (132) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {PLUS}, {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (133) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: PLUS after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (134) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {PLUS}, {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: ?, size: O(1) [0] ---------------------------------------- (135) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: PLUS after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (136) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ 1 }-> 1 + PLUS(z - 1, z') :|: z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(0, z') :|: z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', 0) + TIMES(z - 1, z') :|: z' >= 0, z - 1 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (137) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (138) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] ---------------------------------------- (139) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (140) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (141) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (142) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + plus(z - 1, z') :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> plus(z', 0) :|: z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (143) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (144) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (145) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: p after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (146) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {p}, {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: ?, size: O(n^1) [z] ---------------------------------------- (147) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: p after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (148) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (149) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (150) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (151) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: MINUS after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (152) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {MINUS}, {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: ?, size: O(1) [0] ---------------------------------------- (153) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: MINUS after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z' ---------------------------------------- (154) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + MINUS(z, 1 + 0) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ 1 }-> 1 + MINUS(z, z' - 1) :|: z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (155) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (156) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + s7 :|: s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + s6 :|: s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + s5 :|: s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] ---------------------------------------- (157) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2*z*z' + 2*z' ---------------------------------------- (158) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + s7 :|: s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + s6 :|: s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + s5 :|: s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: ?, size: O(n^2) [2*z*z' + 2*z'] ---------------------------------------- (159) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: times after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (160) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) :|: z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + s7 :|: s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + s6 :|: s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + s5 :|: s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', times(z', z)) + TIMES(z', z) :|: z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 }-> 1 + PLUS(z', plus(z', times(z - 2, z'))) + TIMES(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> plus(z', plus(z', times(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] ---------------------------------------- (161) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (162) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', s22) :|: s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', s21) :|: s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', s20) :|: s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, minus(z, 1 + 0), z', s16) + s7 :|: s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', s19) + TIMES(z', z) :|: s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, minus(z, 1 + 0), z', s15) + s6 :|: s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', s18) + TIMES(z', z) :|: s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, minus(z, 1 + 0), z', s14) + s5 :|: s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', s17) + TIMES(z', z) :|: s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s10 + TIMES(1 + (z - 2), z') :|: s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] ---------------------------------------- (163) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: minus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (164) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', s22) :|: s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', s21) :|: s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', s20) :|: s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, minus(z, 1 + 0), z', s16) + s7 :|: s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', s19) + TIMES(z', z) :|: s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, minus(z, 1 + 0), z', s15) + s6 :|: s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', s18) + TIMES(z', z) :|: s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, minus(z, 1 + 0), z', s14) + s5 :|: s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', s17) + TIMES(z', z) :|: s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s10 + TIMES(1 + (z - 2), z') :|: s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {minus}, {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: ?, size: O(n^1) [z] ---------------------------------------- (165) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: minus after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (166) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', s22) :|: s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', s21) :|: s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', s20) :|: s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, minus(z, 1 + 0), z', s16) + s7 :|: s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, minus(z, 1 + 0), z', s19) + TIMES(z', z) :|: s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, minus(z, 1 + 0), z', s15) + s6 :|: s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, minus(z, 1 + 0), z', s18) + TIMES(z', z) :|: s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, minus(z, 1 + 0), z', s14) + s5 :|: s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, minus(z, 1 + 0), z', s17) + TIMES(z', z) :|: s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s10 + TIMES(1 + (z - 2), z') :|: s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> p(p(minus(z, z' - 2))) :|: z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (167) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (168) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, s31, z', s22) :|: s31 >= 0, s31 <= z, s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s30, z', s21) :|: s30 >= 0, s30 <= z, s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s29, z', s20) :|: s29 >= 0, s29 <= z, s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, s25, z', s16) + s7 :|: s25 >= 0, s25 <= z, s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, s28, z', s19) + TIMES(z', z) :|: s28 >= 0, s28 <= z, s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, s24, z', s15) + s6 :|: s24 >= 0, s24 <= z, s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s27, z', s18) + TIMES(z', z) :|: s27 >= 0, s27 <= z, s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, s23, z', s14) + s5 :|: s23 >= 0, s23 <= z, s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s26, z', s17) + TIMES(z', z) :|: s26 >= 0, s26 <= z, s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s10 + TIMES(1 + (z - 2), z') :|: s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> s34 :|: s32 >= 0, s32 <= z, s33 >= 0, s33 <= s32, s34 >= 0, s34 <= s33, z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (169) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: TIMES after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (170) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, s31, z', s22) :|: s31 >= 0, s31 <= z, s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s30, z', s21) :|: s30 >= 0, s30 <= z, s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s29, z', s20) :|: s29 >= 0, s29 <= z, s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, s25, z', s16) + s7 :|: s25 >= 0, s25 <= z, s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, s28, z', s19) + TIMES(z', z) :|: s28 >= 0, s28 <= z, s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, s24, z', s15) + s6 :|: s24 >= 0, s24 <= z, s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s27, z', s18) + TIMES(z', z) :|: s27 >= 0, s27 <= z, s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, s23, z', s14) + s5 :|: s23 >= 0, s23 <= z, s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s26, z', s17) + TIMES(z', z) :|: s26 >= 0, s26 <= z, s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s10 + TIMES(1 + (z - 2), z') :|: s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> s34 :|: s32 >= 0, s32 <= z, s33 >= 0, s33 <= s32, s34 >= 0, s34 <= s33, z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {TIMES}, {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: O(1) [0], size: O(n^1) [z] TIMES: runtime: ?, size: O(1) [0] ---------------------------------------- (171) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: TIMES after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 3*z + 3*z*z' ---------------------------------------- (172) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, s31, z', s22) :|: s31 >= 0, s31 <= z, s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s30, z', s21) :|: s30 >= 0, s30 <= z, s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s29, z', s20) :|: s29 >= 0, s29 <= z, s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, s25, z', s16) + s7 :|: s25 >= 0, s25 <= z, s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(2, s28, z', s19) + TIMES(z', z) :|: s28 >= 0, s28 <= z, s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, s24, z', s15) + s6 :|: s24 >= 0, s24 <= z, s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s27, z', s18) + TIMES(z', z) :|: s27 >= 0, s27 <= z, s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, s23, z', s14) + s5 :|: s23 >= 0, s23 <= z, s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s26, z', s17) + TIMES(z', z) :|: s26 >= 0, s26 <= z, s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + TIMES(0, z') :|: s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ 1 + z' }-> 1 + s'' + TIMES(z - 1, z') :|: s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s10 + TIMES(1 + (z - 2), z') :|: s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> s34 :|: s32 >= 0, s32 <= z, s33 >= 0, s33 <= s32, s34 >= 0, s34 <= s33, z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: O(1) [0], size: O(n^1) [z] TIMES: runtime: O(n^2) [3*z + 3*z*z'], size: O(1) [0] ---------------------------------------- (173) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (174) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, s31, z', s22) :|: s31 >= 0, s31 <= z, s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s30, z', s21) :|: s30 >= 0, s30 <= z, s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s29, z', s20) :|: s29 >= 0, s29 <= z, s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, s25, z', s16) + s7 :|: s25 >= 0, s25 <= z, s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(2, s28, z', s19) + s40 :|: s40 >= 0, s40 <= 0, s28 >= 0, s28 <= z, s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, s24, z', s15) + s6 :|: s24 >= 0, s24 <= z, s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(1, s27, z', s18) + s39 :|: s39 >= 0, s39 <= 0, s27 >= 0, s27 <= z, s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, s23, z', s14) + s5 :|: s23 >= 0, s23 <= z, s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(0, s26, z', s17) + s38 :|: s38 >= 0, s38 <= 0, s26 >= 0, s26 <= z, s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + s35 :|: s35 >= 0, s35 <= 0, s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ -2 + 3*z + 3*z*z' + -2*z' }-> 1 + s'' + s37 :|: s37 >= 0, s37 <= 0, s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ -2 + 3*z + 3*z*z' + -2*z' }-> 1 + s10 + s36 :|: s36 >= 0, s36 <= 0, s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> s34 :|: s32 >= 0, s32 <= z, s33 >= 0, s33 <= s32, s34 >= 0, s34 <= s33, z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: O(1) [0], size: O(n^1) [z] TIMES: runtime: O(n^2) [3*z + 3*z*z'], size: O(1) [0] ---------------------------------------- (175) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: FACITER after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: IF after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (176) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, s31, z', s22) :|: s31 >= 0, s31 <= z, s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s30, z', s21) :|: s30 >= 0, s30 <= z, s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s29, z', s20) :|: s29 >= 0, s29 <= z, s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, s25, z', s16) + s7 :|: s25 >= 0, s25 <= z, s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(2, s28, z', s19) + s40 :|: s40 >= 0, s40 <= 0, s28 >= 0, s28 <= z, s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, s24, z', s15) + s6 :|: s24 >= 0, s24 <= z, s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(1, s27, z', s18) + s39 :|: s39 >= 0, s39 <= 0, s27 >= 0, s27 <= z, s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, s23, z', s14) + s5 :|: s23 >= 0, s23 <= z, s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(0, s26, z', s17) + s38 :|: s38 >= 0, s38 <= 0, s26 >= 0, s26 <= z, s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + s35 :|: s35 >= 0, s35 <= 0, s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ -2 + 3*z + 3*z*z' + -2*z' }-> 1 + s'' + s37 :|: s37 >= 0, s37 <= 0, s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ -2 + 3*z + 3*z*z' + -2*z' }-> 1 + s10 + s36 :|: s36 >= 0, s36 <= 0, s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> s34 :|: s32 >= 0, s32 <= z, s33 >= 0, s33 <= s32, s34 >= 0, s34 <= s33, z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: O(1) [0], size: O(n^1) [z] TIMES: runtime: O(n^2) [3*z + 3*z*z'], size: O(1) [0] FACITER: runtime: ?, size: O(1) [0] IF: runtime: ?, size: O(1) [1] ---------------------------------------- (177) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: FACITER after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (178) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(2, s31, z', s22) :|: s31 >= 0, s31 <= z, s22 >= 0, s22 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 }-> 1 + IF(1, s30, z', s21) :|: s30 >= 0, s30 <= z, s21 >= 0, s21 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(0, s29, z', s20) :|: s29 >= 0, s29 <= z, s20 >= 0, s20 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(2, s25, z', s16) + s7 :|: s25 >= 0, s25 <= z, s16 >= 0, s16 <= 2 * z + 2 * (z * z'), s7 >= 0, s7 <= 0, z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(2, s28, z', s19) + s40 :|: s40 >= 0, s40 <= 0, s28 >= 0, s28 <= z, s19 >= 0, s19 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z = 0 FACITER(z, z') -{ 2 }-> 1 + IF(1, s24, z', s15) + s6 :|: s24 >= 0, s24 <= z, s15 >= 0, s15 <= 2 * z + 2 * (z * z'), s6 >= 0, s6 <= 0, z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(1, s27, z', s18) + s39 :|: s39 >= 0, s39 <= 0, s27 >= 0, s27 <= z, s18 >= 0, s18 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0, z - 1 >= 0 FACITER(z, z') -{ 2 }-> 1 + IF(0, s23, z', s14) + s5 :|: s23 >= 0, s23 <= z, s14 >= 0, s14 <= 2 * z + 2 * (z * z'), s5 >= 0, s5 <= 0, z' >= 0, z >= 0 FACITER(z, z') -{ 1 + 3*z*z' + 3*z' }-> 1 + IF(0, s26, z', s17) + s38 :|: s38 >= 0, s38 <= 0, s26 >= 0, s26 <= z, s17 >= 0, s17 <= 2 * z + 2 * (z * z'), z' >= 0, z >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z', z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 MINUS(z, z') -{ z' }-> 1 + s4 :|: s4 >= 0, s4 <= 0, z' - 1 >= 0, z >= 0 PLUS(z, z') -{ z }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ 1 + z' }-> 1 + s' + s35 :|: s35 >= 0, s35 <= 0, s' >= 0, s' <= 0, z' >= 0, z = 1 + 0 TIMES(z, z') -{ -2 + 3*z + 3*z*z' + -2*z' }-> 1 + s'' + s37 :|: s37 >= 0, s37 <= 0, s'' >= 0, s'' <= 0, z' >= 0, z - 1 >= 0 TIMES(z, z') -{ -2 + 3*z + 3*z*z' + -2*z' }-> 1 + s10 + s36 :|: s36 >= 0, s36 <= 0, s8 >= 0, s8 <= 2 * z' + 2 * (z' * (z - 2)), s9 >= 0, s9 <= z' + s8, s10 >= 0, s10 <= 0, z' >= 0, z - 2 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z - 1 >= 0 isZero(z) -{ 0 }-> 0 :|: z >= 0 minus(z, z') -{ 0 }-> s34 :|: s32 >= 0, s32 <= z, s33 >= 0, s33 <= s32, s34 >= 0, s34 <= s33, z' - 2 >= 0, z >= 0 minus(z, z') -{ 0 }-> z :|: z >= 0, z' = 0 minus(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0, z = 0 minus(z, z') -{ 0 }-> 0 :|: z' = 1 + 0, z >= 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, 0 = 0 minus(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z >= 0, v0 >= 0, 0 = v0 minus(z, z') -{ 0 }-> z - 1 :|: z' = 1 + 0, z >= 0, z - 1 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: z >= 0 p(z) -{ 0 }-> z - 1 :|: z - 1 >= 0 plus(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> 1 + s3 :|: s3 >= 0, s3 <= z - 1 + z', z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= z' + 0, z' >= 0, z = 1 + 0 times(z, z') -{ 0 }-> s13 :|: s11 >= 0, s11 <= 2 * z' + 2 * (z' * (z - 2)), s12 >= 0, s12 <= z' + s11, s13 >= 0, s13 <= z' + s12, z' >= 0, z - 2 >= 0 times(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= z' + 0, z' >= 0, z - 1 >= 0 times(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 Function symbols to be analyzed: {FACITER,IF} Previous analysis results are: isZero: runtime: O(1) [0], size: O(1) [2] PLUS: runtime: O(n^1) [z], size: O(1) [0] plus: runtime: O(1) [0], size: O(n^1) [z + z'] p: runtime: O(1) [0], size: O(n^1) [z] MINUS: runtime: O(n^1) [z'], size: O(1) [0] times: runtime: O(1) [0], size: O(n^2) [2*z*z' + 2*z'] minus: runtime: O(1) [0], size: O(n^1) [z] TIMES: runtime: O(n^2) [3*z + 3*z*z'], size: O(1) [0] FACITER: runtime: INF, size: O(1) [0] IF: runtime: ?, size: O(1) [1] ---------------------------------------- (179) 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: times(v0, v1) -> null_times [0] plus(v0, v1) -> null_plus [0] isZero(v0) -> null_isZero [0] minus(v0, v1) -> null_minus [0] p(v0) -> null_p [0] PLUS(v0, v1) -> null_PLUS [0] TIMES(v0, v1) -> null_TIMES [0] IF(v0, v1, v2, v3) -> null_IF [0] MINUS(v0, v1) -> null_MINUS [0] And the following fresh constants: null_times, null_plus, null_isZero, null_minus, null_p, null_PLUS, null_TIMES, null_IF, null_MINUS, const ---------------------------------------- (180) 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: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) [1] TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) [1] FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) [1] FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) [1] IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) [1] MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) [1] FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) [1] times(0, z0) -> 0 [0] times(s(z0), z1) -> plus(z1, times(z0, z1)) [0] plus(0, z0) -> z0 [0] plus(s(z0), z1) -> s(plus(z0, z1)) [0] isZero(0) -> true [0] isZero(s(z0)) -> false [0] minus(0, z0) -> 0 [0] minus(z0, s(z1)) -> p(minus(z0, z1)) [0] minus(z0, 0) -> z0 [0] p(s(z0)) -> z0 [0] p(0) -> 0 [0] times(v0, v1) -> null_times [0] plus(v0, v1) -> null_plus [0] isZero(v0) -> null_isZero [0] minus(v0, v1) -> null_minus [0] p(v0) -> null_p [0] PLUS(v0, v1) -> null_PLUS [0] TIMES(v0, v1) -> null_TIMES [0] IF(v0, v1, v2, v3) -> null_IF [0] MINUS(v0, v1) -> null_MINUS [0] The TRS has the following type information: PLUS :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> c1:null_PLUS s :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p c1 :: c1:null_PLUS -> c1:null_PLUS TIMES :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> c3:null_TIMES c3 :: c1:null_PLUS -> c3:null_TIMES -> c3:null_TIMES times :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p FACITER :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> c12:c13:c11 c12 :: c15:null_IF -> c8:null_MINUS -> c12:c13:c11 IF :: false:true:null_isZero -> s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> c15:null_IF isZero :: s:0:null_times:null_plus:null_minus:null_p -> false:true:null_isZero minus :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p 0 :: s:0:null_times:null_plus:null_minus:null_p MINUS :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> c8:null_MINUS c13 :: c15:null_IF -> c3:null_TIMES -> c12:c13:c11 false :: false:true:null_isZero c15 :: c12:c13:c11 -> c15:null_IF c8 :: c8:null_MINUS -> c8:null_MINUS c11 :: c15:null_IF -> c12:c13:c11 plus :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p true :: false:true:null_isZero p :: s:0:null_times:null_plus:null_minus:null_p -> s:0:null_times:null_plus:null_minus:null_p null_times :: s:0:null_times:null_plus:null_minus:null_p null_plus :: s:0:null_times:null_plus:null_minus:null_p null_isZero :: false:true:null_isZero null_minus :: s:0:null_times:null_plus:null_minus:null_p null_p :: s:0:null_times:null_plus:null_minus:null_p null_PLUS :: c1:null_PLUS null_TIMES :: c3:null_TIMES null_IF :: c15:null_IF null_MINUS :: c8:null_MINUS const :: c12:c13:c11 Rewrite Strategy: INNERMOST ---------------------------------------- (181) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: 0 => 0 false => 1 true => 2 null_times => 0 null_plus => 0 null_isZero => 0 null_minus => 0 null_p => 0 null_PLUS => 0 null_TIMES => 0 null_IF => 0 null_MINUS => 0 const => 0 ---------------------------------------- (182) Obligation: Complexity RNTS consisting of the following rules: FACITER(z, z') -{ 1 }-> 1 + IF(isZero(z0), minus(z0, 1 + 0), z1, times(z1, z0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(isZero(z0), minus(z0, 1 + 0), z1, times(z1, z0)) + TIMES(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 FACITER(z, z') -{ 1 }-> 1 + IF(isZero(z0), minus(z0, 1 + 0), z1, times(z1, z0)) + MINUS(z0, 1 + 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 IF(z, z', z'', z3) -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z3 = v3, v2 >= 0, v3 >= 0 IF(z, z', z'', z3) -{ 1 }-> 1 + FACITER(z0, z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 MINUS(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MINUS(z, z') -{ 1 }-> 1 + MINUS(z0, z1) :|: z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1 PLUS(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 PLUS(z, z') -{ 1 }-> 1 + PLUS(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 TIMES(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 TIMES(z, z') -{ 1 }-> 1 + PLUS(z1, times(z0, z1)) + TIMES(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 isZero(z) -{ 0 }-> 2 :|: z = 0 isZero(z) -{ 0 }-> 1 :|: z = 1 + z0, z0 >= 0 isZero(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 minus(z, z') -{ 0 }-> z0 :|: z = z0, z0 >= 0, z' = 0 minus(z, z') -{ 0 }-> p(minus(z0, z1)) :|: z = z0, z1 >= 0, z0 >= 0, z' = 1 + z1 minus(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 minus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 p(z) -{ 0 }-> z0 :|: z = 1 + z0, z0 >= 0 p(z) -{ 0 }-> 0 :|: z = 0 p(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 plus(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> 1 + plus(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> plus(z1, times(z0, z1)) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 times(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (183) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) by FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(true, minus(0, s(0)), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) ---------------------------------------- (184) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(true, minus(0, s(0)), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(true, minus(0, s(0)), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) K tuples:none Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, FACITER_2, IF_4, MINUS_2 Compound Symbols: c1_1, c3_2, c13_2, c15_1, c8_1, c11_1, c12_2 ---------------------------------------- (185) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (186) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) K tuples:none Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, FACITER_2, IF_4, MINUS_2 Compound Symbols: c1_1, c3_2, c13_2, c15_1, c8_1, c11_1, c12_2, c12_1 ---------------------------------------- (187) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. FACITER(0, x1) -> c12(MINUS(0, s(0))) We considered the (Usable) Rules: isZero(0) -> true isZero(s(z0)) -> false And the Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(FACITER(x_1, x_2)) = [1] POL(IF(x_1, x_2, x_3, x_4)) = x_1 POL(MINUS(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(false) = [1] POL(isZero(x_1)) = [1] POL(minus(x_1, x_2)) = [1] + x_1 + x_2 POL(p(x_1)) = [1] + x_1 POL(plus(x_1, x_2)) = [1] + x_1 + x_2 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (188) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, FACITER_2, IF_4, MINUS_2 Compound Symbols: c1_1, c3_2, c13_2, c15_1, c8_1, c11_1, c12_2, c12_1 ---------------------------------------- (189) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) by FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0), TIMES(0, z0)) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(0, x1) -> c13(IF(true, minus(0, s(0)), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) ---------------------------------------- (190) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0), TIMES(0, z0)) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(0, x1) -> c13(IF(true, minus(0, s(0)), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0), TIMES(0, z0)) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(0, x1) -> c13(IF(true, minus(0, s(0)), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c11_1, c12_2, c12_1, c13_2 ---------------------------------------- (191) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (192) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c11_1, c12_2, c12_1, c13_2, c13_1 ---------------------------------------- (193) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. FACITER(0, x1) -> c13(TIMES(x1, 0)) We considered the (Usable) Rules: isZero(0) -> true isZero(s(z0)) -> false And the Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(FACITER(x_1, x_2)) = [1] POL(IF(x_1, x_2, x_3, x_4)) = x_1 POL(MINUS(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(false) = [1] POL(isZero(x_1)) = [1] POL(minus(x_1, x_2)) = [1] + x_1 + x_2 POL(p(x_1)) = [1] + x_1 POL(plus(x_1, x_2)) = [1] + x_1 + x_2 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (194) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c11_1, c12_2, c12_1, c13_2, c13_1 ---------------------------------------- (195) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0))) by FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(0, x1) -> c11(IF(true, minus(0, s(0)), x1, times(x1, 0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) ---------------------------------------- (196) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(0, x1) -> c11(IF(true, minus(0, s(0)), x1, times(x1, 0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(0, x1) -> c11(IF(true, minus(0, s(0)), x1, times(x1, 0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (197) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, x1) -> c11(IF(true, minus(0, s(0)), x1, times(x1, 0))) ---------------------------------------- (198) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (199) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, 0) -> c12(IF(isZero(z0), minus(z0, s(0)), 0, 0), MINUS(z0, s(0))) by FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(0, 0) -> c12(IF(true, minus(0, s(0)), 0, 0), MINUS(0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) ---------------------------------------- (200) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(0, 0) -> c12(IF(true, minus(0, s(0)), 0, 0), MINUS(0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(0, 0) -> c12(IF(true, minus(0, s(0)), 0, 0), MINUS(0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (201) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (202) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (203) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. FACITER(0, 0) -> c12(MINUS(0, s(0))) We considered the (Usable) Rules: isZero(0) -> true isZero(s(z0)) -> false And the Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(FACITER(x_1, x_2)) = [1] POL(IF(x_1, x_2, x_3, x_4)) = x_1 POL(MINUS(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(false) = [1] POL(isZero(x_1)) = [1] POL(minus(x_1, x_2)) = [1] + x_1 + x_2 POL(p(x_1)) = [1] + x_1 POL(plus(x_1, x_2)) = [1] + x_1 + x_2 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (204) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (205) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z1, s(z0)) -> c12(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) by FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(0, s(x1)) -> c12(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) ---------------------------------------- (206) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(0, s(x1)) -> c12(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(0, s(x1)) -> c12(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (207) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (208) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (209) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) We considered the (Usable) Rules:none And the Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(FACITER(x_1, x_2)) = [1] POL(IF(x_1, x_2, x_3, x_4)) = [1] POL(MINUS(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(false) = [1] POL(isZero(x_1)) = [1] POL(minus(x_1, x_2)) = [1] + x_1 + x_2 POL(p(x_1)) = [1] + x_1 POL(plus(x_1, x_2)) = 0 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (210) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (211) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, x1) -> c12(IF(isZero(0), 0, x1, times(x1, 0)), MINUS(0, s(0))) by FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), plus(0, times(z0, 0))), MINUS(0, s(0))) FACITER(0, x0) -> c12(IF(true, 0, x0, times(x0, 0)), MINUS(0, s(0))) ---------------------------------------- (212) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x0) -> c12(IF(true, 0, x0, times(x0, 0)), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x0) -> c12(IF(true, 0, x0, times(x0, 0)), MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (213) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (214) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x0) -> c12(MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (215) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x0) -> c12(MINUS(0, s(0))) ---------------------------------------- (216) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (217) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, x1) -> c12(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), MINUS(z0, s(0))) by FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(z1, s(z0)) -> c12(IF(isZero(z1), p(minus(z1, 0)), s(z0), plus(z1, times(z0, z1))), MINUS(z1, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(true, p(minus(0, 0)), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) ---------------------------------------- (218) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(true, p(minus(0, 0)), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(true, p(minus(0, 0)), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (219) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (220) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (221) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x0) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) ---------------------------------------- (222) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_2, c12_1, c13_2, c13_1, c11_1 ---------------------------------------- (223) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(s(z0), x1) -> c12(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) by FACITER(s(x0), 0) -> c12(IF(false, minus(s(x0), s(0)), 0, 0), MINUS(s(x0), s(0))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0)))), MINUS(s(x0), s(0))) FACITER(s(x0), x1) -> c12(IF(false, p(minus(s(x0), 0)), x1, times(x1, s(x0))), MINUS(s(x0), s(0))) ---------------------------------------- (224) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (225) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z1, s(z0)) -> c13(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) by FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(0, s(x1)) -> c13(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) ---------------------------------------- (226) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(0, s(x1)) -> c13(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(0, s(x1)) -> c13(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (227) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (228) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (229) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) We considered the (Usable) Rules: isZero(0) -> true isZero(s(z0)) -> false And the Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(FACITER(x_1, x_2)) = [1] POL(IF(x_1, x_2, x_3, x_4)) = x_1 POL(MINUS(x_1, x_2)) = 0 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c13(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(false) = [1] POL(isZero(x_1)) = [1] POL(minus(x_1, x_2)) = [1] + x_1 + x_2 POL(p(x_1)) = [1] + x_1 POL(plus(x_1, x_2)) = 0 POL(s(x_1)) = 0 POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (230) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (231) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, x1) -> c13(IF(isZero(0), 0, x1, times(x1, 0)), TIMES(x1, 0)) by FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0), TIMES(0, 0)) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), plus(0, times(z0, 0))), TIMES(s(z0), 0)) FACITER(0, x0) -> c13(IF(true, 0, x0, times(x0, 0)), TIMES(x0, 0)) ---------------------------------------- (232) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0), TIMES(0, 0)) FACITER(0, x0) -> c13(IF(true, 0, x0, times(x0, 0)), TIMES(x0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0), TIMES(0, 0)) FACITER(0, x0) -> c13(IF(true, 0, x0, times(x0, 0)), TIMES(x0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (233) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (234) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x0) -> c13(TIMES(x0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (235) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, x0) -> c13(TIMES(x0, 0)) ---------------------------------------- (236) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (237) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, x1) -> c13(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0)), TIMES(x1, z0)) by FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0), TIMES(0, z0)) FACITER(z1, s(z0)) -> c13(IF(isZero(z1), p(minus(z1, 0)), s(z0), plus(z1, times(z0, z1))), TIMES(s(z0), z1)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(0, x1) -> c13(IF(true, p(minus(0, 0)), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) ---------------------------------------- (238) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0), TIMES(0, z0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(0, x1) -> c13(IF(true, p(minus(0, 0)), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0), TIMES(0, z0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(0, x1) -> c13(IF(true, p(minus(0, 0)), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (239) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (240) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (241) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, x0) -> c13(TIMES(x0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) ---------------------------------------- (242) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_2, c13_1, c11_1, c12_2 ---------------------------------------- (243) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(s(z0), x1) -> c13(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) by FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0), TIMES(0, s(x0))) FACITER(s(x0), s(z0)) -> c13(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0)))), TIMES(s(z0), s(x0))) FACITER(s(x0), x1) -> c13(IF(false, p(minus(s(x0), 0)), x1, times(x1, s(x0))), TIMES(x1, s(x0))) ---------------------------------------- (244) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0), TIMES(0, s(x0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0), TIMES(0, s(x0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (245) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (246) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (247) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, 0) -> c13(IF(isZero(z0), minus(z0, s(0)), 0, 0)) by FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, 0) -> c13(IF(true, minus(0, s(0)), 0, 0)) FACITER(s(z0), 0) -> c13(IF(false, minus(s(z0), s(0)), 0, 0)) ---------------------------------------- (248) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c13(IF(true, minus(0, s(0)), 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c13(IF(true, minus(0, s(0)), 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (249) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, 0) -> c13(IF(true, minus(0, s(0)), 0, 0)) ---------------------------------------- (250) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (251) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, 0) -> c11(IF(isZero(z0), minus(z0, s(0)), 0, 0)) by FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, 0) -> c11(IF(true, minus(0, s(0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) ---------------------------------------- (252) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, 0) -> c11(IF(true, minus(0, s(0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, 0) -> c11(IF(true, minus(0, s(0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (253) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, 0) -> c11(IF(true, minus(0, s(0)), 0, 0)) ---------------------------------------- (254) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (255) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z1, s(z0)) -> c11(IF(isZero(z1), minus(z1, s(0)), s(z0), plus(z1, times(z0, z1)))) by FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(0, s(x1)) -> c11(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) ---------------------------------------- (256) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(0, s(x1)) -> c11(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(0, s(x1)) -> c11(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (257) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, s(x1)) -> c11(IF(true, minus(0, s(0)), s(x1), plus(0, times(x1, 0)))) ---------------------------------------- (258) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (259) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, x1) -> c11(IF(isZero(0), 0, x1, times(x1, 0))) by FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(0, s(z0)) -> c11(IF(isZero(0), 0, s(z0), plus(0, times(z0, 0)))) FACITER(0, x0) -> c11(IF(true, 0, x0, times(x0, 0))) ---------------------------------------- (260) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x0) -> c11(IF(true, 0, x0, times(x0, 0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x0) -> c11(IF(true, 0, x0, times(x0, 0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (261) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, x0) -> c11(IF(true, 0, x0, times(x0, 0))) ---------------------------------------- (262) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (263) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(z0, x1) -> c11(IF(isZero(z0), p(minus(z0, 0)), x1, times(x1, z0))) by FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(z1, s(z0)) -> c11(IF(isZero(z1), p(minus(z1, 0)), s(z0), plus(z1, times(z0, z1)))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(0, x1) -> c11(IF(true, p(minus(0, 0)), x1, times(x1, 0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) ---------------------------------------- (264) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(0, x1) -> c11(IF(true, p(minus(0, 0)), x1, times(x1, 0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(0, x1) -> c11(IF(true, p(minus(0, 0)), x1, times(x1, 0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (265) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, x1) -> c11(IF(true, p(minus(0, 0)), x1, times(x1, 0))) ---------------------------------------- (266) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c11_1, c12_2, c13_2 ---------------------------------------- (267) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(s(z0), x1) -> c11(IF(false, minus(s(z0), s(0)), x1, times(x1, s(z0)))) by FACITER(s(x0), 0) -> c11(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(s(x0), s(z0)) -> c11(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(x0), x1) -> c11(IF(false, p(minus(s(x0), 0)), x1, times(x1, s(x0)))) ---------------------------------------- (268) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (269) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) by FACITER(0, 0) -> c12(IF(true, 0, 0, 0), MINUS(0, s(0))) ---------------------------------------- (270) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(true, 0, 0, 0), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(true, 0, 0, 0), MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (271) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (272) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (273) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) ---------------------------------------- (274) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (275) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, 0) -> c12(IF(isZero(0), 0, 0, 0), MINUS(0, s(0))) by FACITER(0, 0) -> c12(IF(true, 0, 0, 0), MINUS(0, s(0))) ---------------------------------------- (276) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c12(IF(true, 0, 0, 0), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (277) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (278) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (279) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) by FACITER(0, 0) -> c13(IF(true, 0, 0, 0)) ---------------------------------------- (280) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c13(IF(true, 0, 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c13(IF(true, 0, 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (281) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, 0) -> c13(IF(true, 0, 0, 0)) ---------------------------------------- (282) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (283) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, 0) -> c13(IF(isZero(0), 0, 0, 0)) by FACITER(0, 0) -> c13(IF(true, 0, 0, 0)) ---------------------------------------- (284) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c13(IF(true, 0, 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (285) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, 0) -> c13(IF(true, 0, 0, 0)) ---------------------------------------- (286) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (287) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) by FACITER(0, 0) -> c11(IF(true, 0, 0, 0)) ---------------------------------------- (288) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c11(IF(true, 0, 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c11(IF(true, 0, 0, 0)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (289) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, 0) -> c11(IF(true, 0, 0, 0)) ---------------------------------------- (290) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (291) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace FACITER(0, 0) -> c11(IF(isZero(0), 0, 0, 0)) by FACITER(0, 0) -> c11(IF(true, 0, 0, 0)) ---------------------------------------- (292) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, 0) -> c11(IF(true, 0, 0, 0)) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (293) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, 0) -> c11(IF(true, 0, 0, 0)) ---------------------------------------- (294) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (295) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(x1)) -> c12(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), MINUS(0, s(0))) by FACITER(0, s(z0)) -> c12(IF(true, minus(0, s(0)), s(z0), times(z0, 0)), MINUS(0, s(0))) ---------------------------------------- (296) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, s(z0)) -> c12(IF(true, minus(0, s(0)), s(z0), times(z0, 0)), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, s(z0)) -> c12(IF(true, minus(0, s(0)), s(z0), times(z0, 0)), MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (297) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (298) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(0, s(z0)) -> c12(MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (299) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, s(z0)) -> c12(MINUS(0, s(0))) ---------------------------------------- (300) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (301) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(z0), s(x1)) -> c12(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), MINUS(s(z0), s(0))) by FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) ---------------------------------------- (302) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (303) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) by FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) ---------------------------------------- (304) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (305) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) by FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) ---------------------------------------- (306) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(0, s(x1)) -> c12(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), MINUS(0, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (307) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), plus(0, times(z0, 0))), MINUS(0, s(0))) by FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) ---------------------------------------- (308) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (309) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, x1) -> c12(IF(isZero(0), p(0), x1, times(x1, 0)), MINUS(0, s(0))) by FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) ---------------------------------------- (310) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) S tuples: PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: PLUS_2, TIMES_2, IF_4, MINUS_2, FACITER_2 Compound Symbols: c1_1, c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1 ---------------------------------------- (311) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) by PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) ---------------------------------------- (312) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, MINUS_2, FACITER_2, PLUS_2 Compound Symbols: c3_2, c15_1, c8_1, c12_1, c13_1, c12_2, c13_2, c11_1, c1_1 ---------------------------------------- (313) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace MINUS(z0, s(z1)) -> c8(MINUS(z0, z1)) by MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) ---------------------------------------- (314) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(s(z0), s(x1)) -> c12(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) K tuples: FACITER(0, x1) -> c12(MINUS(0, s(0))) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, 0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c12_1, c13_1, c12_2, c13_2, c11_1, c1_1, c8_1 ---------------------------------------- (315) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing nodes: FACITER(0, x0) -> c12(MINUS(0, s(0))) FACITER(0, s(x1)) -> c12(MINUS(0, s(0))) FACITER(0, 0) -> c12(MINUS(0, s(0))) ---------------------------------------- (316) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0)))), MINUS(s(x0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0), MINUS(z0, s(0))) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0), MINUS(s(z0), s(0))) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), MINUS(z0, s(0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), MINUS(z1, s(0))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), MINUS(z0, s(0))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0)), MINUS(z0, s(0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), MINUS(s(z0), s(0))) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), MINUS(s(z0), s(0))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0)), MINUS(0, s(0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0)), MINUS(0, s(0))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c12_2, c13_2, c11_1, c1_1, c8_1 ---------------------------------------- (317) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 17 trailing tuple parts ---------------------------------------- (318) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (319) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) We considered the (Usable) Rules:none And the Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(FACITER(x_1, x_2)) = 0 POL(IF(x_1, x_2, x_3, x_4)) = 0 POL(MINUS(x_1, x_2)) = x_2 POL(PLUS(x_1, x_2)) = 0 POL(TIMES(x_1, x_2)) = 0 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(false) = [1] POL(isZero(x_1)) = [1] POL(minus(x_1, x_2)) = [1] + x_1 + x_2 POL(p(x_1)) = [1] + x_1 POL(plus(x_1, x_2)) = 0 POL(s(x_1)) = [1] + x_1 POL(times(x_1, x_2)) = [1] + x_1 + x_2 POL(true) = [1] ---------------------------------------- (320) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (321) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(x1)) -> c13(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0)), TIMES(s(x1), 0)) by FACITER(0, s(z0)) -> c13(IF(true, minus(0, s(0)), s(z0), times(z0, 0)), TIMES(s(z0), 0)) ---------------------------------------- (322) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(0, s(z0)) -> c13(IF(true, minus(0, s(0)), s(z0), times(z0, 0)), TIMES(s(z0), 0)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(0, s(z0)) -> c13(IF(true, minus(0, s(0)), s(z0), times(z0, 0)), TIMES(s(z0), 0)) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (323) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (324) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(0, s(z0)) -> c13(TIMES(s(z0), 0)) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (325) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, s(z0)) -> c13(TIMES(s(z0), 0)) ---------------------------------------- (326) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (327) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(z0), s(x1)) -> c13(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0))))), TIMES(s(x1), s(z0))) by FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) ---------------------------------------- (328) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (329) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) by FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) ---------------------------------------- (330) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (331) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) by FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) ---------------------------------------- (332) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(0, s(x1)) -> c13(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0))), TIMES(s(x1), 0)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (333) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), plus(0, times(z0, 0))), TIMES(s(z0), 0)) by FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) ---------------------------------------- (334) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (335) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, x1) -> c13(IF(isZero(0), p(0), x1, times(x1, 0)), TIMES(x1, 0)) by FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) ---------------------------------------- (336) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) K tuples: FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (337) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace FACITER(0, x1) -> c13(TIMES(x1, 0)) by FACITER(0, s(y0)) -> c13(TIMES(s(y0), 0)) ---------------------------------------- (338) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (339) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace FACITER(0, x0) -> c13(TIMES(x0, 0)) by FACITER(0, s(y0)) -> c13(TIMES(s(y0), 0)) ---------------------------------------- (340) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (341) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) by FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) ---------------------------------------- (342) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(s(z0), s(x1)) -> c13(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0)))), TIMES(s(x1), s(z0))) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (343) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(x0), s(z0)) -> c13(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0)))), TIMES(s(z0), s(x0))) by FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) ---------------------------------------- (344) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(s(z0), x1) -> c13(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0))), TIMES(x1, s(z0))) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (345) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(x0), x1) -> c13(IF(false, p(minus(s(x0), 0)), x1, times(x1, s(x0))), TIMES(x1, s(x0))) by FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) ---------------------------------------- (346) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (347) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(x1)) -> c11(IF(isZero(0), minus(0, s(0)), s(x1), times(x1, 0))) by FACITER(0, s(z0)) -> c11(IF(true, minus(0, s(0)), s(z0), times(z0, 0))) ---------------------------------------- (348) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) FACITER(0, s(z0)) -> c11(IF(true, minus(0, s(0)), s(z0), times(z0, 0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) FACITER(0, s(z0)) -> c11(IF(true, minus(0, s(0)), s(z0), times(z0, 0))) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_1, c13_2, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (349) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing nodes: FACITER(0, s(z0)) -> c11(IF(true, minus(0, s(0)), s(z0), times(z0, 0))) ---------------------------------------- (350) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_2, c13_1, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (351) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(s(z0), s(x1)) -> c11(IF(isZero(s(z0)), minus(s(z0), s(0)), s(x1), s(plus(z0, times(x1, s(z0)))))) by FACITER(s(z0), s(z1)) -> c11(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) ---------------------------------------- (352) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) FACITER(s(z0), s(z1)) -> c11(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) FACITER(s(z0), s(z1)) -> c11(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_2, c13_1, c11_1, c1_1, c8_1, c12_1 ---------------------------------------- (353) CdtRewritingProof (BOTH BOUNDS(ID, ID)) Used rewriting to replace FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) by FACITER(0, s(z0)) -> c11(IF(isZero(0), 0, s(z0), times(z0, 0))) ---------------------------------------- (354) Obligation: Complexity Dependency Tuples Problem Rules: times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) minus(z0, 0) -> z0 p(s(z0)) -> z0 p(0) -> 0 Tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(0, x1) -> c13(TIMES(x1, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(0, s(x1)) -> c11(IF(isZero(0), 0, s(x1), plus(0, times(x1, 0)))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(x0), s(z0)) -> c12(IF(false, minus(s(x0), s(0)), s(z0), plus(s(x0), times(z0, s(x0))))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) FACITER(s(z0), s(z1)) -> c11(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c11(IF(isZero(0), 0, s(z0), times(z0, 0))) S tuples: TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACITER(z0, s(0)) -> c13(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0)), TIMES(s(0), z0)) FACITER(z1, s(s(z0))) -> c13(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1)))), TIMES(s(s(z0)), z1)) FACITER(z0, s(x1)) -> c13(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0))), TIMES(s(x1), z0)) FACITER(z0, x1) -> c13(IF(isZero(z0), p(z0), x1, times(x1, z0)), TIMES(x1, z0)) FACITER(z0, 0) -> c13(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(x0), 0) -> c13(IF(false, minus(s(x0), s(0)), 0, 0)) FACITER(z0, 0) -> c11(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c11(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c11(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c11(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c11(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(s(z0), s(x1)) -> c11(IF(false, minus(s(z0), s(0)), s(x1), plus(s(z0), times(x1, s(z0))))) FACITER(0, x1) -> c11(IF(isZero(0), p(0), x1, times(x1, 0))) FACITER(z0, x1) -> c11(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c11(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) PLUS(s(s(y0)), z1) -> c1(PLUS(s(y0), z1)) FACITER(z0, 0) -> c12(IF(isZero(z0), p(minus(z0, 0)), 0, 0)) FACITER(s(z0), 0) -> c12(IF(false, minus(s(z0), s(0)), 0, 0)) FACITER(z0, s(0)) -> c12(IF(isZero(z0), minus(z0, s(0)), s(0), plus(z0, 0))) FACITER(z1, s(s(z0))) -> c12(IF(isZero(z1), minus(z1, s(0)), s(s(z0)), plus(z1, plus(z1, times(z0, z1))))) FACITER(z0, s(x1)) -> c12(IF(isZero(z0), p(minus(z0, 0)), s(x1), plus(z0, times(x1, z0)))) FACITER(z0, x1) -> c12(IF(isZero(z0), p(z0), x1, times(x1, z0))) FACITER(s(z0), x1) -> c12(IF(false, p(minus(s(z0), 0)), x1, times(x1, s(z0)))) FACITER(s(z0), s(z1)) -> c12(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c12(IF(isZero(0), 0, s(z0), times(z0, 0))) FACITER(0, z0) -> c12(IF(isZero(0), 0, z0, times(z0, 0))) FACITER(s(z0), s(z1)) -> c13(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0))))), TIMES(s(z1), s(z0))) FACITER(0, s(z0)) -> c13(IF(isZero(0), 0, s(z0), times(z0, 0)), TIMES(s(z0), 0)) FACITER(0, z0) -> c13(IF(isZero(0), 0, z0, times(z0, 0)), TIMES(z0, 0)) FACITER(s(z0), z1) -> c13(IF(false, p(s(z0)), z1, times(z1, s(z0))), TIMES(z1, s(z0))) FACITER(s(z0), s(z1)) -> c11(IF(false, minus(s(z0), s(0)), s(z1), s(plus(z0, times(z1, s(z0)))))) FACITER(0, s(z0)) -> c11(IF(isZero(0), 0, s(z0), times(z0, 0))) K tuples: FACITER(x0, s(x1)) -> c13(TIMES(s(x1), x0)) FACITER(0, s(x1)) -> c13(TIMES(s(x1), 0)) MINUS(z0, s(s(y1))) -> c8(MINUS(z0, s(y1))) Defined Rule Symbols: times_2, plus_2, isZero_1, minus_2, p_1 Defined Pair Symbols: TIMES_2, IF_4, FACITER_2, PLUS_2, MINUS_2 Compound Symbols: c3_2, c15_1, c13_2, c13_1, c11_1, c1_1, c8_1, c12_1