KILLED proof of input_XbrqnBMCNQ.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 426 ms] (2) CpxRelTRS (3) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxRelTRS (5) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (6) CpxTRS (7) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 74 ms] (8) CdtProblem (9) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxRelTRS (11) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CpxRelTRS (13) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (14) typed CpxTrs (15) OrderProof [LOWER BOUND(ID), 60 ms] (16) typed CpxTrs (17) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] (18) TRS for Loop Detection (19) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (20) CpxWeightedTrs (21) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (22) CpxWeightedTrs (23) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (24) CpxTypedWeightedTrs (25) CompletionProof [UPPER BOUND(ID), 0 ms] (26) CpxTypedWeightedCompleteTrs (27) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (28) CpxTypedWeightedCompleteTrs (29) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (30) CpxRNTS (31) InliningProof [UPPER BOUND(ID), 1609 ms] (32) CpxRNTS (33) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (34) CpxRNTS (35) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 1 ms] (36) CpxRNTS (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (38) CpxRNTS (39) IntTrsBoundProof [UPPER BOUND(ID), 146 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 57 ms] (42) CpxRNTS (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (44) CpxRNTS (45) IntTrsBoundProof [UPPER BOUND(ID), 193 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 54 ms] (48) CpxRNTS (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 1229 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 358 ms] (54) CpxRNTS (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 218 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (60) CpxRNTS (61) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 198 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 14 ms] (66) CpxRNTS (67) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 309 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 109 ms] (72) CpxRNTS (73) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 734 ms] (76) CpxRNTS (77) IntTrsBoundProof [UPPER BOUND(ID), 221 ms] (78) CpxRNTS (79) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (80) CpxRNTS (81) IntTrsBoundProof [UPPER BOUND(ID), 2057 ms] (82) CpxRNTS (83) IntTrsBoundProof [UPPER BOUND(ID), 314 ms] (84) CpxRNTS (85) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (86) CpxRNTS (87) IntTrsBoundProof [UPPER BOUND(ID), 419 ms] (88) CpxRNTS (89) IntTrsBoundProof [UPPER BOUND(ID), 125 ms] (90) CpxRNTS (91) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (92) CpxRNTS (93) IntTrsBoundProof [UPPER BOUND(ID), 109 ms] (94) CpxRNTS (95) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (96) CpxRNTS (97) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (98) CpxRNTS (99) IntTrsBoundProof [UPPER BOUND(ID), 260 ms] (100) CpxRNTS (101) IntTrsBoundProof [UPPER BOUND(ID), 13 ms] (102) CpxRNTS (103) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (104) CpxRNTS (105) IntTrsBoundProof [UPPER BOUND(ID), 179 ms] (106) CpxRNTS (107) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] (108) CpxRNTS (109) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (110) CpxRNTS (111) IntTrsBoundProof [UPPER BOUND(ID), 79 ms] (112) CpxRNTS (113) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] (114) CpxRNTS (115) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (116) CpxRNTS (117) IntTrsBoundProof [UPPER BOUND(ID), 189 ms] (118) CpxRNTS (119) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (120) CpxRNTS (121) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (122) CpxRNTS (123) IntTrsBoundProof [UPPER BOUND(ID), 4155 ms] (124) CpxRNTS (125) IntTrsBoundProof [UPPER BOUND(ID), 445 ms] (126) CpxRNTS (127) CompletionProof [UPPER BOUND(ID), 0 ms] (128) CpxTypedWeightedCompleteTrs (129) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 17 ms] (130) CpxRNTS (131) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (132) CdtProblem (133) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (134) CdtProblem (135) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (136) CdtProblem (137) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (138) CdtProblem (139) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (140) CdtProblem (141) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (142) CdtProblem (143) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (144) CdtProblem (145) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (146) CpxRelTRS (147) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (148) CpxTRS (149) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (150) CpxWeightedTrs (151) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (152) CpxWeightedTrs (153) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (154) CpxTypedWeightedTrs (155) CompletionProof [UPPER BOUND(ID), 0 ms] (156) CpxTypedWeightedCompleteTrs (157) NarrowingProof [BOTH BOUNDS(ID, ID), 6 ms] (158) CpxTypedWeightedCompleteTrs (159) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (160) CpxRNTS (161) InliningProof [UPPER BOUND(ID), 2103 ms] (162) CpxRNTS (163) SimplificationProof [BOTH BOUNDS(ID, ID), 18 ms] (164) CpxRNTS (165) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 8 ms] (166) CpxRNTS (167) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (168) CpxRNTS (169) IntTrsBoundProof [UPPER BOUND(ID), 190 ms] (170) CpxRNTS (171) IntTrsBoundProof [UPPER BOUND(ID), 42 ms] (172) CpxRNTS (173) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (174) CpxRNTS (175) IntTrsBoundProof [UPPER BOUND(ID), 112 ms] (176) CpxRNTS (177) IntTrsBoundProof [UPPER BOUND(ID), 13 ms] (178) CpxRNTS (179) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (180) CpxRNTS (181) IntTrsBoundProof [UPPER BOUND(ID), 521 ms] (182) CpxRNTS (183) IntTrsBoundProof [UPPER BOUND(ID), 224 ms] (184) CpxRNTS (185) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (186) CpxRNTS (187) IntTrsBoundProof [UPPER BOUND(ID), 207 ms] (188) CpxRNTS (189) IntTrsBoundProof [UPPER BOUND(ID), 63 ms] (190) CpxRNTS (191) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (192) CpxRNTS (193) IntTrsBoundProof [UPPER BOUND(ID), 1412 ms] (194) CpxRNTS (195) IntTrsBoundProof [UPPER BOUND(ID), 184 ms] (196) CpxRNTS (197) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (198) CpxRNTS (199) IntTrsBoundProof [UPPER BOUND(ID), 359 ms] (200) CpxRNTS (201) IntTrsBoundProof [UPPER BOUND(ID), 204 ms] (202) CpxRNTS (203) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (204) CpxRNTS (205) IntTrsBoundProof [UPPER BOUND(ID), 197 ms] (206) CpxRNTS (207) IntTrsBoundProof [UPPER BOUND(ID), 118 ms] (208) CpxRNTS (209) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (210) CpxRNTS (211) IntTrsBoundProof [UPPER BOUND(ID), 36 ms] (212) CpxRNTS (213) IntTrsBoundProof [UPPER BOUND(ID), 13 ms] (214) CpxRNTS (215) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (216) CpxRNTS (217) IntTrsBoundProof [UPPER BOUND(ID), 268 ms] (218) CpxRNTS (219) IntTrsBoundProof [UPPER BOUND(ID), 42 ms] (220) CpxRNTS (221) ResultPropagationProof [UPPER BOUND(ID), 2 ms] (222) CpxRNTS (223) IntTrsBoundProof [UPPER BOUND(ID), 327 ms] (224) CpxRNTS (225) IntTrsBoundProof [UPPER BOUND(ID), 97 ms] (226) CpxRNTS (227) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (228) CpxRNTS (229) IntTrsBoundProof [UPPER BOUND(ID), 754 ms] (230) CpxRNTS (231) IntTrsBoundProof [UPPER BOUND(ID), 158 ms] (232) CpxRNTS (233) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (234) CpxRNTS (235) IntTrsBoundProof [UPPER BOUND(ID), 1376 ms] (236) CpxRNTS (237) IntTrsBoundProof [UPPER BOUND(ID), 291 ms] (238) CpxRNTS (239) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (240) CpxRNTS (241) IntTrsBoundProof [UPPER BOUND(ID), 167 ms] (242) CpxRNTS (243) IntTrsBoundProof [UPPER BOUND(ID), 23 ms] (244) CpxRNTS (245) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (246) CpxRNTS (247) IntTrsBoundProof [UPPER BOUND(ID), 468 ms] (248) CpxRNTS (249) IntTrsBoundProof [UPPER BOUND(ID), 4 ms] (250) CpxRNTS (251) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (252) CpxRNTS (253) IntTrsBoundProof [UPPER BOUND(ID), 189 ms] (254) CpxRNTS (255) IntTrsBoundProof [UPPER BOUND(ID), 14 ms] (256) CpxRNTS (257) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (258) CpxRNTS (259) IntTrsBoundProof [UPPER BOUND(ID), 208 ms] (260) CpxRNTS (261) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] (262) CpxRNTS (263) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (264) CpxRNTS (265) IntTrsBoundProof [UPPER BOUND(ID), 4215 ms] (266) CpxRNTS (267) IntTrsBoundProof [UPPER BOUND(ID), 687 ms] (268) CpxRNTS (269) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (270) CpxRNTS (271) IntTrsBoundProof [UPPER BOUND(ID), 94 ms] (272) CpxRNTS (273) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] (274) CpxRNTS (275) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (276) CpxRNTS (277) IntTrsBoundProof [UPPER BOUND(ID), 10.2 s] (278) CpxRNTS (279) IntTrsBoundProof [UPPER BOUND(ID), 3074 ms] (280) CpxRNTS (281) CompletionProof [UPPER BOUND(ID), 0 ms] (282) CpxTypedWeightedCompleteTrs (283) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (284) CpxRNTS (285) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 346 ms] (286) CdtProblem (287) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 169 ms] (288) CdtProblem (289) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (290) CdtProblem (291) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 175 ms] (292) CdtProblem (293) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (294) CdtProblem (295) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 201 ms] (296) CdtProblem (297) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 151 ms] (298) CdtProblem (299) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (300) CdtProblem (301) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 136 ms] (302) CdtProblem (303) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 137 ms] (304) CdtProblem (305) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 147 ms] (306) CdtProblem (307) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 1617 ms] (308) CdtProblem (309) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (310) CdtProblem (311) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (312) CdtProblem (313) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (314) CdtProblem (315) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (316) CdtProblem (317) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (318) CdtProblem (319) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (320) CdtProblem (321) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (322) CdtProblem (323) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (324) CdtProblem (325) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 9 ms] (326) CdtProblem (327) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (328) CdtProblem (329) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (330) CdtProblem (331) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (332) CdtProblem (333) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (334) CdtProblem (335) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (336) CdtProblem (337) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (338) CdtProblem (339) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 235 ms] (340) CdtProblem (341) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 240 ms] (342) CdtProblem (343) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 234 ms] (344) CdtProblem (345) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (346) CdtProblem (347) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (348) CdtProblem (349) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 229 ms] (350) CdtProblem (351) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 291 ms] (352) CdtProblem (353) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (354) CdtProblem (355) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (356) CdtProblem (357) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (358) CdtProblem (359) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (360) CdtProblem (361) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (362) CdtProblem (363) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (364) CdtProblem (365) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (366) CdtProblem (367) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (368) CdtProblem (369) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (370) CdtProblem (371) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (372) CdtProblem (373) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (374) CdtProblem (375) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (376) CdtProblem (377) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (378) CdtProblem (379) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (380) CdtProblem (381) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (382) CdtProblem (383) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (384) CdtProblem (385) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (386) CdtProblem (387) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (388) CdtProblem (389) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (390) CdtProblem (391) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (392) CdtProblem (393) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (394) CdtProblem (395) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (396) CdtProblem (397) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (398) CdtProblem (399) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (400) CdtProblem (401) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (402) CdtProblem (403) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (404) CdtProblem (405) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (406) CdtProblem (407) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (408) CdtProblem (409) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (410) CdtProblem (411) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (412) CdtProblem (413) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (414) CdtProblem ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) attach(@line, @m) -> attach#1(@line, @m) attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) attach#1(nil, @m) -> nil attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) attach#2(nil, @x, @xs) -> nil lineMult(@l, @m2) -> lineMult#1(@m2, @l) lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) lineMult#1(nil, @l) -> nil m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l, @m')) -> mkBase(@l) makeBase#1(nil) -> nil matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) matrixMult'#1(nil, @m2) -> nil matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) matrixMultList#1(nil, @acc) -> @acc matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) mkBase#1(nil) -> nil mult(@l1, @l2) -> mult#1(@l1, @l2) mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) mult#1(nil, @l2) -> #abs(#0) mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) mult#2(nil, @x, @xs) -> #abs(#0) split(@m) -> split#1(@m) split#1(::(@l, @ls)) -> split#2(@l, @ls) split#1(nil) -> tuple#2(nil, nil) split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) split#2(nil, @ls) -> tuple#2(nil, nil) split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) transAcc(@m, @base) -> transAcc#1(@m, @base) transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) transAcc#1(nil, @base) -> @base transpose(@m) -> transpose#1(@m, @m) transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) transpose#1(nil, @m) -> nil transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) transpose#3(nil, @l) -> nil transpose'(@m) -> transAcc(@m, makeBase(@m)) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) SInnermostTerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) proved innermost termination of relative rules ---------------------------------------- (2) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) attach(@line, @m) -> attach#1(@line, @m) attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) attach#1(nil, @m) -> nil attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) attach#2(nil, @x, @xs) -> nil lineMult(@l, @m2) -> lineMult#1(@m2, @l) lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) lineMult#1(nil, @l) -> nil m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l, @m')) -> mkBase(@l) makeBase#1(nil) -> nil matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) matrixMult'#1(nil, @m2) -> nil matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) matrixMultList#1(nil, @acc) -> @acc matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) mkBase#1(nil) -> nil mult(@l1, @l2) -> mult#1(@l1, @l2) mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) mult#1(nil, @l2) -> #abs(#0) mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) mult#2(nil, @x, @xs) -> #abs(#0) split(@m) -> split#1(@m) split#1(::(@l, @ls)) -> split#2(@l, @ls) split#1(nil) -> tuple#2(nil, nil) split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) split#2(nil, @ls) -> tuple#2(nil, nil) split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) transAcc(@m, @base) -> transAcc#1(@m, @base) transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) transAcc#1(nil, @base) -> @base transpose(@m) -> transpose#1(@m, @m) transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) transpose#1(nil, @m) -> nil transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) transpose#3(nil, @l) -> nil transpose'(@m) -> transAcc(@m, makeBase(@m)) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (3) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (4) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) attach(@line, @m) -> attach#1(@line, @m) attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) attach#1(nil, @m) -> nil attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) attach#2(nil, @x, @xs) -> nil lineMult(@l, @m2) -> lineMult#1(@m2, @l) lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) lineMult#1(nil, @l) -> nil m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l, @m')) -> mkBase(@l) makeBase#1(nil) -> nil matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) matrixMult'#1(nil, @m2) -> nil matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) matrixMultList#1(nil, @acc) -> @acc matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) mkBase#1(nil) -> nil mult(@l1, @l2) -> mult#1(@l1, @l2) mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) mult#1(nil, @l2) -> #abs(#0) mult#2(::(@y, @ys), @x, @xs) -> +'(*'(@x, @y), mult(@xs, @ys)) mult#2(nil, @x, @xs) -> #abs(#0) split(@m) -> split#1(@m) split#1(::(@l, @ls)) -> split#2(@l, @ls) split#1(nil) -> tuple#2(nil, nil) split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) split#2(nil, @ls) -> tuple#2(nil, nil) split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) transAcc(@m, @base) -> transAcc#1(@m, @base) transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) transAcc#1(nil, @base) -> @base transpose(@m) -> transpose#1(@m, @m) transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) transpose#1(nil, @m) -> nil transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) transpose#3(nil, @l) -> nil transpose'(@m) -> transAcc(@m, makeBase(@m)) The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (5) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (6) 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: #abs(#0) -> #0 #abs(#neg(@x)) -> #pos(@x) #abs(#pos(@x)) -> #pos(@x) #abs(#s(@x)) -> #pos(#s(@x)) *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) attach(@line, @m) -> attach#1(@line, @m) attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) attach#1(nil, @m) -> nil attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) attach#2(nil, @x, @xs) -> nil lineMult(@l, @m2) -> lineMult#1(@m2, @l) lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) lineMult#1(nil, @l) -> nil m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(@m) -> makeBase#1(@m) makeBase#1(::(@l, @m')) -> mkBase(@l) makeBase#1(nil) -> nil matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) matrixMult'#1(nil, @m2) -> nil matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) matrixMultList#1(nil, @acc) -> @acc matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) mkBase(@m) -> mkBase#1(@m) mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) mkBase#1(nil) -> nil mult(@l1, @l2) -> mult#1(@l1, @l2) mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) mult#1(nil, @l2) -> #abs(#0) mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) mult#2(nil, @x, @xs) -> #abs(#0) split(@m) -> split#1(@m) split#1(::(@l, @ls)) -> split#2(@l, @ls) split#1(nil) -> tuple#2(nil, nil) split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) split#2(nil, @ls) -> tuple#2(nil, nil) split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) transAcc(@m, @base) -> transAcc#1(@m, @base) transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) transAcc#1(nil, @base) -> @base transpose(@m) -> transpose#1(@m, @m) transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) transpose#1(nil, @m) -> nil transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) transpose#3(nil, @l) -> nil transpose'(@m) -> transAcc(@m, makeBase(@m)) #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (7) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Tuples: #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) S tuples: #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) K tuples:none Defined Rule Symbols: #abs_1, *_2, +_2, attach_2, attach#1_2, attach#2_3, lineMult_2, lineMult#1_2, m1_1, m2_1, m3_1, m4_1, makeBase_1, makeBase#1_1, matrixMult_2, matrixMult'_2, matrixMult'#1_2, matrixMult3_3, matrixMultList_2, matrixMultList#1_2, matrixMultOld_2, mkBase_1, mkBase#1_1, mult_2, mult#1_2, mult#2_3, split_1, split#1_1, split#2_2, split#3_3, transAcc_2, transAcc#1_2, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2, transpose'_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #ADD_2, #MULT_2, #NATMULT_2, #PRED_1, #SUCC_1, #ABS_1, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, M1_1, M2_1, M3_1, M4_1, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT_2, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULT3_3, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MATRIXMULTOLD_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, SPLIT#2_2, SPLIT#3_3, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, TRANSPOSE'_1 Compound Symbols: c, c1_1, c2_2, c3_1, c4_2, c5, c6, c7, c8, c9_1, c10_1, c11, c12_1, c13_1, c14, c15_2, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28_1, c29_1, c30_1, c31_1, c32, c33_1, c34, c35_1, c36_1, c37_1, c38, c39_1, c40_1, c41_1, c42_1, c43_1, c44_1, c45_1, c46_1, c47_1, c48_1, c49_1, c50_1, c51_1, c52_1, c53_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c60_1, c61_1, c62_1, c63_1, c64_1, c65, c66_3, c67_1, c68_1, c69_1, c70, c71_2, c72_1, c73_2, c74, c75_2, c76_1, c77_1, c78, c79_1, c80_1, c81_1, c82_2, c83_2, c84_1, c85_1, c86_1, c87, c88_2, c89, c90, c91_1, c92_2, c93, c94_1, c95_2, c96, c97_1, c98_1, c99, c100_2 ---------------------------------------- (9) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (10) 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: #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) The (relative) TRS S consists of the following rules: #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Rewrite Strategy: INNERMOST ---------------------------------------- (11) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (12) 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: #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*'(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*'(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) The (relative) TRS S consists of the following rules: #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *'(z0, z1) -> #mult(z0, z1) +'(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +'(*'(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Rewrite Strategy: INNERMOST ---------------------------------------- (13) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (14) Obligation: Innermost TRS: Rules: #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*'(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*'(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *'(z0, z1) -> #mult(z0, z1) +'(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +'(*'(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Types: #ABS :: #0:#neg:#pos:#s:c28:c29::::nil -> c24:c25:c26:c27 #0 :: #0:#neg:#pos:#s:c28:c29::::nil c24 :: c24:c25:c26:c27 #neg :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c25 :: c24:c25:c26:c27 #pos :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c26 :: c24:c25:c26:c27 #s :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c27 :: c24:c25:c26:c27 *' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c28 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> #0:#neg:#pos:#s:c28:c29::::nil #MULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c29 :: c:c1:c2:c3:c4 -> #0:#neg:#pos:#s:c28:c29::::nil #ADD :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c:c1:c2:c3:c4 ATTACH :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c30 c30 :: c31:c32 -> c30 ATTACH#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c31:c32 :: :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c31 :: c33:c34 -> c31:c32 ATTACH#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c33:c34 nil :: #0:#neg:#pos:#s:c28:c29::::nil c32 :: c31:c32 c33 :: c30 -> c33:c34 c34 :: c33:c34 LINEMULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c35 c35 :: c36:c37:c38 -> c35 LINEMULT#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c36:c37:c38 c36 :: c79 -> c36:c37:c38 MULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c79 c37 :: c35 -> c36:c37:c38 c38 :: c36:c37:c38 M1 :: a -> c39:c40:c41:c42:c43:c44 c39 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c40 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c41 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c42 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c43 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c44 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 M2 :: b -> c45:c46:c47:c48:c49:c50 c45 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c46 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c47 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c48 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c49 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c50 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 M3 :: c -> c51:c52:c53:c54:c55:c56:c57:c58 c51 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c52 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c53 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c54 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c55 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c56 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c57 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c58 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 M4 :: d -> c59:c60:c61:c62 c59 :: c24:c25:c26:c27 -> c59:c60:c61:c62 c60 :: c24:c25:c26:c27 -> c59:c60:c61:c62 c61 :: c24:c25:c26:c27 -> c59:c60:c61:c62 c62 :: c24:c25:c26:c27 -> c59:c60:c61:c62 MAKEBASE :: #0:#neg:#pos:#s:c28:c29::::nil -> c63 c63 :: c64:c65 -> c63 MAKEBASE#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> c64:c65 c64 :: c76 -> c64:c65 MKBASE :: #0:#neg:#pos:#s:c28:c29::::nil -> c76 c65 :: c64:c65 MATRIXMULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c66 c66 :: c67 -> c91 -> c63 -> c66 MATRIXMULT' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c67 transAcc :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil makeBase :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil TRANSACC :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c91 c67 :: c68:c69:c70 -> c67 MATRIXMULT'#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c68:c69:c70 c68 :: c35 -> c68:c69:c70 c69 :: c67 -> c68:c69:c70 c70 :: c68:c69:c70 MATRIXMULT3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c71 c71 :: c66 -> c66 -> c71 matrixMult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil MATRIXMULTLIST :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c72 c72 :: c73:c74 -> c72 MATRIXMULTLIST#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c73:c74 c73 :: c72 -> c66 -> c73:c74 c74 :: c73:c74 MATRIXMULTOLD :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c75 c75 :: c67 -> c94 -> c75 transpose :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil TRANSPOSE :: #0:#neg:#pos:#s:c28:c29::::nil -> c94 c76 :: c77:c78 -> c76 MKBASE#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> c77:c78 c77 :: c76 -> c77:c78 c78 :: c77:c78 c79 :: c80:c81 -> c79 MULT#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c80:c81 c80 :: c82:c83:c84 -> c80:c81 MULT#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c82:c83:c84 c81 :: c24:c25:c26:c27 -> c80:c81 c82 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c82:c83:c84 mult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c83 :: #0:#neg:#pos:#s:c28:c29::::nil -> c79 -> c82:c83:c84 c84 :: c24:c25:c26:c27 -> c82:c83:c84 SPLIT :: #0:#neg:#pos:#s:c28:c29::::nil -> c85 c85 :: c86:c87 -> c85 SPLIT#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> c86:c87 c86 :: c88:c89 -> c86:c87 SPLIT#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c88:c89 c87 :: c86:c87 c88 :: c90 -> c85 -> c88:c89 SPLIT#3 :: tuple#2 -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c90 split :: #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 c89 :: c88:c89 tuple#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 c90 :: c90 c91 :: c92:c93 -> c91 TRANSACC#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c92:c93 c92 :: c30 -> c91 -> c92:c93 c93 :: c92:c93 c94 :: c95:c96 -> c94 TRANSPOSE#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c95:c96 c95 :: c97 -> c85 -> c95:c96 TRANSPOSE#2 :: tuple#2 -> c97 c96 :: c95:c96 c97 :: c98:c99 -> c97 TRANSPOSE#3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c98:c99 c98 :: c94 -> c98:c99 c99 :: c98:c99 TRANSPOSE' :: #0:#neg:#pos:#s:c28:c29::::nil -> c100 c100 :: c91 -> c63 -> c100 c :: c:c1:c2:c3:c4 c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: #0:#neg:#pos:#s:c28:c29::::nil -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: #0:#neg:#pos:#s:c28:c29::::nil -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil #succ :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil #mult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil #abs :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil attach :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil attach#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil attach#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil lineMult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil lineMult#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil m1 :: e -> #0:#neg:#pos:#s:c28:c29::::nil m2 :: f -> #0:#neg:#pos:#s:c28:c29::::nil m3 :: g -> #0:#neg:#pos:#s:c28:c29::::nil m4 :: h -> #0:#neg:#pos:#s:c28:c29::::nil makeBase#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mkBase :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMult' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMult'#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMult3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMultList :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMultList#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMultOld :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mkBase#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mult#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mult#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil split#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 split#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 split#3 :: tuple#2 -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 transAcc#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil transpose#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil transpose#2 :: tuple#2 -> #0:#neg:#pos:#s:c28:c29::::nil transpose#3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil transpose' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil hole_c24:c25:c26:c271_101 :: c24:c25:c26:c27 hole_#0:#neg:#pos:#s:c28:c29::::nil2_101 :: #0:#neg:#pos:#s:c28:c29::::nil hole_c5:c6:c7:c8:c9:c10:c11:c12:c133_101 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c44_101 :: c:c1:c2:c3:c4 hole_c305_101 :: c30 hole_c31:c326_101 :: c31:c32 hole_c33:c347_101 :: c33:c34 hole_c358_101 :: c35 hole_c36:c37:c389_101 :: c36:c37:c38 hole_c7910_101 :: c79 hole_c39:c40:c41:c42:c43:c4411_101 :: c39:c40:c41:c42:c43:c44 hole_a12_101 :: a hole_c45:c46:c47:c48:c49:c5013_101 :: c45:c46:c47:c48:c49:c50 hole_b14_101 :: b hole_c51:c52:c53:c54:c55:c56:c57:c5815_101 :: c51:c52:c53:c54:c55:c56:c57:c58 hole_c16_101 :: c hole_c59:c60:c61:c6217_101 :: c59:c60:c61:c62 hole_d18_101 :: d hole_c6319_101 :: c63 hole_c64:c6520_101 :: c64:c65 hole_c7621_101 :: c76 hole_c6622_101 :: c66 hole_c6723_101 :: c67 hole_c9124_101 :: c91 hole_c68:c69:c7025_101 :: c68:c69:c70 hole_c7126_101 :: c71 hole_c7227_101 :: c72 hole_c73:c7428_101 :: c73:c74 hole_c7529_101 :: c75 hole_c9430_101 :: c94 hole_c77:c7831_101 :: c77:c78 hole_c80:c8132_101 :: c80:c81 hole_c82:c83:c8433_101 :: c82:c83:c84 hole_c8534_101 :: c85 hole_c86:c8735_101 :: c86:c87 hole_c88:c8936_101 :: c88:c89 hole_c9037_101 :: c90 hole_tuple#238_101 :: tuple#2 hole_c92:c9339_101 :: c92:c93 hole_c95:c9640_101 :: c95:c96 hole_c9741_101 :: c97 hole_c98:c9942_101 :: c98:c99 hole_c10043_101 :: c100 hole_c16:c17:c18:c1944_101 :: c16:c17:c18:c19 hole_c20:c21:c22:c2345_101 :: c20:c21:c22:c23 hole_c14:c1546_101 :: c14:c15 hole_e47_101 :: e hole_f48_101 :: f hole_g49_101 :: g hole_h50_101 :: h gen_#0:#neg:#pos:#s:c28:c29::::nil51_101 :: Nat -> #0:#neg:#pos:#s:c28:c29::::nil gen_c:c1:c2:c3:c452_101 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1553_101 :: Nat -> c14:c15 ---------------------------------------- (15) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: #ADD, ATTACH, ATTACH#1, LINEMULT, LINEMULT#1, MULT, MKBASE, MATRIXMULT', transAcc, TRANSACC, MATRIXMULT'#1, MATRIXMULTLIST, MATRIXMULTLIST#1, transpose, TRANSPOSE, MKBASE#1, MULT#1, mult, SPLIT, SPLIT#1, split, TRANSACC#1, TRANSPOSE#2, #add, #NATMULT, #natmult, attach, attach#1, lineMult, lineMult#1, mkBase, matrixMult', matrixMult'#1, matrixMultList, matrixMultList#1, mkBase#1, mult#1, split#1, transAcc#1, transpose#2 They will be analysed ascendingly in the following order: #add < #ADD #ADD < #NATMULT ATTACH = ATTACH#1 ATTACH < TRANSACC#1 LINEMULT = LINEMULT#1 LINEMULT < MATRIXMULT'#1 MULT < LINEMULT#1 MULT = MULT#1 MKBASE = MKBASE#1 MATRIXMULT' = MATRIXMULT'#1 transAcc < TRANSACC#1 transAcc = transAcc#1 TRANSACC = TRANSACC#1 MATRIXMULTLIST = MATRIXMULTLIST#1 split < transpose transpose = transpose#2 SPLIT < TRANSPOSE split < TRANSPOSE TRANSPOSE = TRANSPOSE#2 mult < MULT#1 mult < lineMult#1 mult = mult#1 SPLIT = SPLIT#1 split < SPLIT#1 split = split#1 #add < #natmult #natmult < #NATMULT attach = attach#1 attach < transAcc#1 lineMult = lineMult#1 lineMult < matrixMult'#1 mkBase = mkBase#1 matrixMult' = matrixMult'#1 matrixMultList = matrixMultList#1 ---------------------------------------- (16) Obligation: Innermost TRS: Rules: #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*'(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*'(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *'(z0, z1) -> #mult(z0, z1) +'(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +'(*'(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Types: #ABS :: #0:#neg:#pos:#s:c28:c29::::nil -> c24:c25:c26:c27 #0 :: #0:#neg:#pos:#s:c28:c29::::nil c24 :: c24:c25:c26:c27 #neg :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c25 :: c24:c25:c26:c27 #pos :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c26 :: c24:c25:c26:c27 #s :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c27 :: c24:c25:c26:c27 *' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c28 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 -> #0:#neg:#pos:#s:c28:c29::::nil #MULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c5:c6:c7:c8:c9:c10:c11:c12:c13 +' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c29 :: c:c1:c2:c3:c4 -> #0:#neg:#pos:#s:c28:c29::::nil #ADD :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c:c1:c2:c3:c4 ATTACH :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c30 c30 :: c31:c32 -> c30 ATTACH#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c31:c32 :: :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c31 :: c33:c34 -> c31:c32 ATTACH#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c33:c34 nil :: #0:#neg:#pos:#s:c28:c29::::nil c32 :: c31:c32 c33 :: c30 -> c33:c34 c34 :: c33:c34 LINEMULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c35 c35 :: c36:c37:c38 -> c35 LINEMULT#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c36:c37:c38 c36 :: c79 -> c36:c37:c38 MULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c79 c37 :: c35 -> c36:c37:c38 c38 :: c36:c37:c38 M1 :: a -> c39:c40:c41:c42:c43:c44 c39 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c40 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c41 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c42 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c43 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 c44 :: c24:c25:c26:c27 -> c39:c40:c41:c42:c43:c44 M2 :: b -> c45:c46:c47:c48:c49:c50 c45 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c46 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c47 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c48 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c49 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 c50 :: c24:c25:c26:c27 -> c45:c46:c47:c48:c49:c50 M3 :: c -> c51:c52:c53:c54:c55:c56:c57:c58 c51 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c52 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c53 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c54 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c55 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c56 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c57 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 c58 :: c24:c25:c26:c27 -> c51:c52:c53:c54:c55:c56:c57:c58 M4 :: d -> c59:c60:c61:c62 c59 :: c24:c25:c26:c27 -> c59:c60:c61:c62 c60 :: c24:c25:c26:c27 -> c59:c60:c61:c62 c61 :: c24:c25:c26:c27 -> c59:c60:c61:c62 c62 :: c24:c25:c26:c27 -> c59:c60:c61:c62 MAKEBASE :: #0:#neg:#pos:#s:c28:c29::::nil -> c63 c63 :: c64:c65 -> c63 MAKEBASE#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> c64:c65 c64 :: c76 -> c64:c65 MKBASE :: #0:#neg:#pos:#s:c28:c29::::nil -> c76 c65 :: c64:c65 MATRIXMULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c66 c66 :: c67 -> c91 -> c63 -> c66 MATRIXMULT' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c67 transAcc :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil makeBase :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil TRANSACC :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c91 c67 :: c68:c69:c70 -> c67 MATRIXMULT'#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c68:c69:c70 c68 :: c35 -> c68:c69:c70 c69 :: c67 -> c68:c69:c70 c70 :: c68:c69:c70 MATRIXMULT3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c71 c71 :: c66 -> c66 -> c71 matrixMult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil MATRIXMULTLIST :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c72 c72 :: c73:c74 -> c72 MATRIXMULTLIST#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c73:c74 c73 :: c72 -> c66 -> c73:c74 c74 :: c73:c74 MATRIXMULTOLD :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c75 c75 :: c67 -> c94 -> c75 transpose :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil TRANSPOSE :: #0:#neg:#pos:#s:c28:c29::::nil -> c94 c76 :: c77:c78 -> c76 MKBASE#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> c77:c78 c77 :: c76 -> c77:c78 c78 :: c77:c78 c79 :: c80:c81 -> c79 MULT#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c80:c81 c80 :: c82:c83:c84 -> c80:c81 MULT#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c82:c83:c84 c81 :: c24:c25:c26:c27 -> c80:c81 c82 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c82:c83:c84 mult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c83 :: #0:#neg:#pos:#s:c28:c29::::nil -> c79 -> c82:c83:c84 c84 :: c24:c25:c26:c27 -> c82:c83:c84 SPLIT :: #0:#neg:#pos:#s:c28:c29::::nil -> c85 c85 :: c86:c87 -> c85 SPLIT#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> c86:c87 c86 :: c88:c89 -> c86:c87 SPLIT#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c88:c89 c87 :: c86:c87 c88 :: c90 -> c85 -> c88:c89 SPLIT#3 :: tuple#2 -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c90 split :: #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 c89 :: c88:c89 tuple#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 c90 :: c90 c91 :: c92:c93 -> c91 TRANSACC#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c92:c93 c92 :: c30 -> c91 -> c92:c93 c93 :: c92:c93 c94 :: c95:c96 -> c94 TRANSPOSE#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c95:c96 c95 :: c97 -> c85 -> c95:c96 TRANSPOSE#2 :: tuple#2 -> c97 c96 :: c95:c96 c97 :: c98:c99 -> c97 TRANSPOSE#3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c98:c99 c98 :: c94 -> c98:c99 c99 :: c98:c99 TRANSPOSE' :: #0:#neg:#pos:#s:c28:c29::::nil -> c100 c100 :: c91 -> c63 -> c100 c :: c:c1:c2:c3:c4 c1 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 #PRED :: #0:#neg:#pos:#s:c28:c29::::nil -> c16:c17:c18:c19 c2 :: c16:c17:c18:c19 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 #add :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c3 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 #SUCC :: #0:#neg:#pos:#s:c28:c29::::nil -> c20:c21:c22:c23 c4 :: c20:c21:c22:c23 -> c:c1:c2:c3:c4 -> c:c1:c2:c3:c4 c5 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c6 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c7 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c8 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c9 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 #NATMULT :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> c14:c15 c10 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c11 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 c12 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c13 :: c14:c15 -> c5:c6:c7:c8:c9:c10:c11:c12:c13 c14 :: c14:c15 c15 :: c:c1:c2:c3:c4 -> c14:c15 -> c14:c15 #natmult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil c16 :: c16:c17:c18:c19 c17 :: c16:c17:c18:c19 c18 :: c16:c17:c18:c19 c19 :: c16:c17:c18:c19 c20 :: c20:c21:c22:c23 c21 :: c20:c21:c22:c23 c22 :: c20:c21:c22:c23 c23 :: c20:c21:c22:c23 #pred :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil #succ :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil #mult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil #abs :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil attach :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil attach#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil attach#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil lineMult :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil lineMult#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil m1 :: e -> #0:#neg:#pos:#s:c28:c29::::nil m2 :: f -> #0:#neg:#pos:#s:c28:c29::::nil m3 :: g -> #0:#neg:#pos:#s:c28:c29::::nil m4 :: h -> #0:#neg:#pos:#s:c28:c29::::nil makeBase#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mkBase :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMult' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMult'#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMult3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMultList :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMultList#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil matrixMultOld :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mkBase#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mult#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil mult#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil split#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 split#2 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 split#3 :: tuple#2 -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> tuple#2 transAcc#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil transpose#1 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil transpose#2 :: tuple#2 -> #0:#neg:#pos:#s:c28:c29::::nil transpose#3 :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil transpose' :: #0:#neg:#pos:#s:c28:c29::::nil -> #0:#neg:#pos:#s:c28:c29::::nil hole_c24:c25:c26:c271_101 :: c24:c25:c26:c27 hole_#0:#neg:#pos:#s:c28:c29::::nil2_101 :: #0:#neg:#pos:#s:c28:c29::::nil hole_c5:c6:c7:c8:c9:c10:c11:c12:c133_101 :: c5:c6:c7:c8:c9:c10:c11:c12:c13 hole_c:c1:c2:c3:c44_101 :: c:c1:c2:c3:c4 hole_c305_101 :: c30 hole_c31:c326_101 :: c31:c32 hole_c33:c347_101 :: c33:c34 hole_c358_101 :: c35 hole_c36:c37:c389_101 :: c36:c37:c38 hole_c7910_101 :: c79 hole_c39:c40:c41:c42:c43:c4411_101 :: c39:c40:c41:c42:c43:c44 hole_a12_101 :: a hole_c45:c46:c47:c48:c49:c5013_101 :: c45:c46:c47:c48:c49:c50 hole_b14_101 :: b hole_c51:c52:c53:c54:c55:c56:c57:c5815_101 :: c51:c52:c53:c54:c55:c56:c57:c58 hole_c16_101 :: c hole_c59:c60:c61:c6217_101 :: c59:c60:c61:c62 hole_d18_101 :: d hole_c6319_101 :: c63 hole_c64:c6520_101 :: c64:c65 hole_c7621_101 :: c76 hole_c6622_101 :: c66 hole_c6723_101 :: c67 hole_c9124_101 :: c91 hole_c68:c69:c7025_101 :: c68:c69:c70 hole_c7126_101 :: c71 hole_c7227_101 :: c72 hole_c73:c7428_101 :: c73:c74 hole_c7529_101 :: c75 hole_c9430_101 :: c94 hole_c77:c7831_101 :: c77:c78 hole_c80:c8132_101 :: c80:c81 hole_c82:c83:c8433_101 :: c82:c83:c84 hole_c8534_101 :: c85 hole_c86:c8735_101 :: c86:c87 hole_c88:c8936_101 :: c88:c89 hole_c9037_101 :: c90 hole_tuple#238_101 :: tuple#2 hole_c92:c9339_101 :: c92:c93 hole_c95:c9640_101 :: c95:c96 hole_c9741_101 :: c97 hole_c98:c9942_101 :: c98:c99 hole_c10043_101 :: c100 hole_c16:c17:c18:c1944_101 :: c16:c17:c18:c19 hole_c20:c21:c22:c2345_101 :: c20:c21:c22:c23 hole_c14:c1546_101 :: c14:c15 hole_e47_101 :: e hole_f48_101 :: f hole_g49_101 :: g hole_h50_101 :: h gen_#0:#neg:#pos:#s:c28:c29::::nil51_101 :: Nat -> #0:#neg:#pos:#s:c28:c29::::nil gen_c:c1:c2:c3:c452_101 :: Nat -> c:c1:c2:c3:c4 gen_c14:c1553_101 :: Nat -> c14:c15 Generator Equations: gen_#0:#neg:#pos:#s:c28:c29::::nil51_101(0) <=> #0 gen_#0:#neg:#pos:#s:c28:c29::::nil51_101(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s:c28:c29::::nil51_101(x)) gen_c:c1:c2:c3:c452_101(0) <=> c gen_c:c1:c2:c3:c452_101(+(x, 1)) <=> c2(c16, gen_c:c1:c2:c3:c452_101(x)) gen_c14:c1553_101(0) <=> c14 gen_c14:c1553_101(+(x, 1)) <=> c15(c, gen_c14:c1553_101(x)) The following defined symbols remain to be analysed: #add, #ADD, ATTACH, ATTACH#1, LINEMULT, LINEMULT#1, MULT, MKBASE, MATRIXMULT', transAcc, TRANSACC, MATRIXMULT'#1, MATRIXMULTLIST, MATRIXMULTLIST#1, transpose, TRANSPOSE, MKBASE#1, MULT#1, mult, SPLIT, SPLIT#1, split, TRANSACC#1, TRANSPOSE#2, #NATMULT, #natmult, attach, attach#1, lineMult, lineMult#1, mkBase, matrixMult', matrixMult'#1, matrixMultList, matrixMultList#1, mkBase#1, mult#1, split#1, transAcc#1, transpose#2 They will be analysed ascendingly in the following order: #add < #ADD #ADD < #NATMULT ATTACH = ATTACH#1 ATTACH < TRANSACC#1 LINEMULT = LINEMULT#1 LINEMULT < MATRIXMULT'#1 MULT < LINEMULT#1 MULT = MULT#1 MKBASE = MKBASE#1 MATRIXMULT' = MATRIXMULT'#1 transAcc < TRANSACC#1 transAcc = transAcc#1 TRANSACC = TRANSACC#1 MATRIXMULTLIST = MATRIXMULTLIST#1 split < transpose transpose = transpose#2 SPLIT < TRANSPOSE split < TRANSPOSE TRANSPOSE = TRANSPOSE#2 mult < MULT#1 mult < lineMult#1 mult = mult#1 SPLIT = SPLIT#1 split < SPLIT#1 split = split#1 #add < #natmult #natmult < #NATMULT attach = attach#1 attach < transAcc#1 lineMult = lineMult#1 lineMult < matrixMult'#1 mkBase = mkBase#1 matrixMult' = matrixMult'#1 matrixMultList = matrixMultList#1 ---------------------------------------- (17) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) Transformed a relative TRS into a decreasing-loop problem. ---------------------------------------- (18) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) The (relative) TRS S consists of the following rules: #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Rewrite Strategy: INNERMOST ---------------------------------------- (19) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (20) 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: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] *(@x, @y) -> #mult(@x, @y) [1] +(@x, @y) -> #add(@x, @y) [1] attach(@line, @m) -> attach#1(@line, @m) [1] attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) [1] attach#1(nil, @m) -> nil [1] attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) [1] attach#2(nil, @x, @xs) -> nil [1] lineMult(@l, @m2) -> lineMult#1(@m2, @l) [1] lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) [1] lineMult#1(nil, @l) -> nil [1] m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) [1] m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) [1] m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) [1] m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) [1] makeBase(@m) -> makeBase#1(@m) [1] makeBase#1(::(@l, @m')) -> mkBase(@l) [1] makeBase#1(nil) -> nil [1] matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) [1] matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) [1] matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) [1] matrixMult'#1(nil, @m2) -> nil [1] matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) [1] matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) [1] matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) [1] matrixMultList#1(nil, @acc) -> @acc [1] matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) [1] mkBase(@m) -> mkBase#1(@m) [1] mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) [1] mkBase#1(nil) -> nil [1] mult(@l1, @l2) -> mult#1(@l1, @l2) [1] mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) [1] mult#1(nil, @l2) -> #abs(#0) [1] mult#2(::(@y, @ys), @x, @xs) -> +(*(@x, @y), mult(@xs, @ys)) [1] mult#2(nil, @x, @xs) -> #abs(#0) [1] split(@m) -> split#1(@m) [1] split#1(::(@l, @ls)) -> split#2(@l, @ls) [1] split#1(nil) -> tuple#2(nil, nil) [1] split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) [1] split#2(nil, @ls) -> tuple#2(nil, nil) [1] split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) [1] transAcc(@m, @base) -> transAcc#1(@m, @base) [1] transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) [1] transAcc#1(nil, @base) -> @base [1] transpose(@m) -> transpose#1(@m, @m) [1] transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) [1] transpose#1(nil, @m) -> nil [1] transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) [1] transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) [1] transpose#3(nil, @l) -> nil [1] transpose'(@m) -> transAcc(@m, makeBase(@m)) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (21) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) Renamed defined symbols to avoid conflicts with arithmetic symbols: * => times + => plus ---------------------------------------- (22) 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: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] attach(@line, @m) -> attach#1(@line, @m) [1] attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) [1] attach#1(nil, @m) -> nil [1] attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) [1] attach#2(nil, @x, @xs) -> nil [1] lineMult(@l, @m2) -> lineMult#1(@m2, @l) [1] lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) [1] lineMult#1(nil, @l) -> nil [1] m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) [1] m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) [1] m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) [1] m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) [1] makeBase(@m) -> makeBase#1(@m) [1] makeBase#1(::(@l, @m')) -> mkBase(@l) [1] makeBase#1(nil) -> nil [1] matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) [1] matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) [1] matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) [1] matrixMult'#1(nil, @m2) -> nil [1] matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) [1] matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) [1] matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) [1] matrixMultList#1(nil, @acc) -> @acc [1] matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) [1] mkBase(@m) -> mkBase#1(@m) [1] mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) [1] mkBase#1(nil) -> nil [1] mult(@l1, @l2) -> mult#1(@l1, @l2) [1] mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) [1] mult#1(nil, @l2) -> #abs(#0) [1] mult#2(::(@y, @ys), @x, @xs) -> plus(times(@x, @y), mult(@xs, @ys)) [1] mult#2(nil, @x, @xs) -> #abs(#0) [1] split(@m) -> split#1(@m) [1] split#1(::(@l, @ls)) -> split#2(@l, @ls) [1] split#1(nil) -> tuple#2(nil, nil) [1] split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) [1] split#2(nil, @ls) -> tuple#2(nil, nil) [1] split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) [1] transAcc(@m, @base) -> transAcc#1(@m, @base) [1] transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) [1] transAcc#1(nil, @base) -> @base [1] transpose(@m) -> transpose#1(@m, @m) [1] transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) [1] transpose#1(nil, @m) -> nil [1] transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) [1] transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) [1] transpose#3(nil, @l) -> nil [1] transpose'(@m) -> transAcc(@m, makeBase(@m)) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (23) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (24) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] attach(@line, @m) -> attach#1(@line, @m) [1] attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) [1] attach#1(nil, @m) -> nil [1] attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) [1] attach#2(nil, @x, @xs) -> nil [1] lineMult(@l, @m2) -> lineMult#1(@m2, @l) [1] lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) [1] lineMult#1(nil, @l) -> nil [1] m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) [1] m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) [1] m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) [1] m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) [1] makeBase(@m) -> makeBase#1(@m) [1] makeBase#1(::(@l, @m')) -> mkBase(@l) [1] makeBase#1(nil) -> nil [1] matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) [1] matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) [1] matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) [1] matrixMult'#1(nil, @m2) -> nil [1] matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) [1] matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) [1] matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) [1] matrixMultList#1(nil, @acc) -> @acc [1] matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) [1] mkBase(@m) -> mkBase#1(@m) [1] mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) [1] mkBase#1(nil) -> nil [1] mult(@l1, @l2) -> mult#1(@l1, @l2) [1] mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) [1] mult#1(nil, @l2) -> #abs(#0) [1] mult#2(::(@y, @ys), @x, @xs) -> plus(times(@x, @y), mult(@xs, @ys)) [1] mult#2(nil, @x, @xs) -> #abs(#0) [1] split(@m) -> split#1(@m) [1] split#1(::(@l, @ls)) -> split#2(@l, @ls) [1] split#1(nil) -> tuple#2(nil, nil) [1] split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) [1] split#2(nil, @ls) -> tuple#2(nil, nil) [1] split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) [1] transAcc(@m, @base) -> transAcc#1(@m, @base) [1] transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) [1] transAcc#1(nil, @base) -> @base [1] transpose(@m) -> transpose#1(@m, @m) [1] transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) [1] transpose#1(nil, @m) -> nil [1] transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) [1] transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) [1] transpose#3(nil, @l) -> nil [1] transpose'(@m) -> transAcc(@m, makeBase(@m)) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] The TRS has the following type information: #abs :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #0 :: #0:#neg:#pos:#s::::nil #neg :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #pos :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #s :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil times :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #mult :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil plus :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #add :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil attach :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil attach#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil :: :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil attach#2 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil nil :: #0:#neg:#pos:#s::::nil lineMult :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil lineMult#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil mult :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil m1 :: a -> #0:#neg:#pos:#s::::nil m2 :: b -> #0:#neg:#pos:#s::::nil m3 :: c -> #0:#neg:#pos:#s::::nil m4 :: d -> #0:#neg:#pos:#s::::nil makeBase :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil makeBase#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil mkBase :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil matrixMult :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil matrixMult' :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil transAcc :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil matrixMult'#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil matrixMult3 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil matrixMultList :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil matrixMultList#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil matrixMultOld :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil transpose :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil mkBase#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil mult#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil mult#2 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil split :: #0:#neg:#pos:#s::::nil -> tuple#2 split#1 :: #0:#neg:#pos:#s::::nil -> tuple#2 split#2 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> tuple#2 tuple#2 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> tuple#2 split#3 :: tuple#2 -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> tuple#2 transAcc#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil transpose#1 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil transpose#2 :: tuple#2 -> #0:#neg:#pos:#s::::nil transpose#3 :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil transpose' :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #pred :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #succ :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil #natmult :: #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil -> #0:#neg:#pos:#s::::nil Rewrite Strategy: INNERMOST ---------------------------------------- (25) 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: m1_1 m2_1 m3_1 m4_1 matrixMult3_3 matrixMultList_2 matrixMultList#1_2 matrixMultOld_2 transpose'_1 (c) The following functions are completely defined: transpose_1 split_1 transAcc_2 makeBase_1 matrixMult_2 times_2 mult_2 transAcc#1_2 split#1_1 attach_2 matrixMult'_2 mult#1_2 transpose#1_2 makeBase#1_1 split#2_2 transpose#2_1 attach#1_2 mult#2_3 #abs_1 matrixMult'#1_2 mkBase_1 mkBase#1_1 transpose#3_2 attach#2_3 plus_2 split#3_3 lineMult_2 lineMult#1_2 #add_2 #mult_2 #natmult_2 #pred_1 #succ_1 Due to the following rules being added: #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] split#1(v0) -> const4 [0] mult#1(v0, v1) -> null_mult#1 [0] transpose#1(v0, v1) -> null_transpose#1 [0] makeBase#1(v0) -> null_makeBase#1 [0] split#2(v0, v1) -> const4 [0] transpose#2(v0) -> null_transpose#2 [0] attach#1(v0, v1) -> null_attach#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] #abs(v0) -> null_#abs [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] mkBase#1(v0) -> null_mkBase#1 [0] transpose#3(v0, v1) -> null_transpose#3 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] split#3(v0, v1, v2) -> const4 [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] And the following fresh constants: null_#add, null_#mult, null_#natmult, null_#pred, null_#succ, null_transAcc#1, const4, null_mult#1, null_transpose#1, null_makeBase#1, null_transpose#2, null_attach#1, null_mult#2, null_#abs, null_matrixMult'#1, null_mkBase#1, null_transpose#3, null_attach#2, null_lineMult#1, const, const1, const2, const3 ---------------------------------------- (26) 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: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] attach(@line, @m) -> attach#1(@line, @m) [1] attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) [1] attach#1(nil, @m) -> nil [1] attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) [1] attach#2(nil, @x, @xs) -> nil [1] lineMult(@l, @m2) -> lineMult#1(@m2, @l) [1] lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) [1] lineMult#1(nil, @l) -> nil [1] m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) [1] m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) [1] m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) [1] m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) [1] makeBase(@m) -> makeBase#1(@m) [1] makeBase#1(::(@l, @m')) -> mkBase(@l) [1] makeBase#1(nil) -> nil [1] matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) [1] matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) [1] matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) [1] matrixMult'#1(nil, @m2) -> nil [1] matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) [1] matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) [1] matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) [1] matrixMultList#1(nil, @acc) -> @acc [1] matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) [1] mkBase(@m) -> mkBase#1(@m) [1] mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) [1] mkBase#1(nil) -> nil [1] mult(@l1, @l2) -> mult#1(@l1, @l2) [1] mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) [1] mult#1(nil, @l2) -> #abs(#0) [1] mult#2(::(@y, @ys), @x, @xs) -> plus(times(@x, @y), mult(@xs, @ys)) [1] mult#2(nil, @x, @xs) -> #abs(#0) [1] split(@m) -> split#1(@m) [1] split#1(::(@l, @ls)) -> split#2(@l, @ls) [1] split#1(nil) -> tuple#2(nil, nil) [1] split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) [1] split#2(nil, @ls) -> tuple#2(nil, nil) [1] split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) [1] transAcc(@m, @base) -> transAcc#1(@m, @base) [1] transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) [1] transAcc#1(nil, @base) -> @base [1] transpose(@m) -> transpose#1(@m, @m) [1] transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) [1] transpose#1(nil, @m) -> nil [1] transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) [1] transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) [1] transpose#3(nil, @l) -> nil [1] transpose'(@m) -> transAcc(@m, makeBase(@m)) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] split#1(v0) -> const4 [0] mult#1(v0, v1) -> null_mult#1 [0] transpose#1(v0, v1) -> null_transpose#1 [0] makeBase#1(v0) -> null_makeBase#1 [0] split#2(v0, v1) -> const4 [0] transpose#2(v0) -> null_transpose#2 [0] attach#1(v0, v1) -> null_attach#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] #abs(v0) -> null_#abs [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] mkBase#1(v0) -> null_mkBase#1 [0] transpose#3(v0, v1) -> null_transpose#3 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] split#3(v0, v1, v2) -> const4 [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] The TRS has the following type information: #abs :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #0 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #neg :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #pos :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #s :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 times :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 plus :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #add :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 attach :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 attach#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 :: :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 attach#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 nil :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 lineMult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 lineMult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m1 :: a -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m2 :: b -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m3 :: c -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m4 :: d -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 makeBase :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 makeBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mkBase :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult' :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transAcc :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult'#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMultList :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMultList#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMultOld :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mkBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mult#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 split :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 split#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 split#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 tuple#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 split#3 :: tuple#2:const4 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 transAcc#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose#2 :: tuple#2:const4 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose#3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose' :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #pred :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #succ :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #natmult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#add :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#natmult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#pred :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#succ :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transAcc#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 const4 :: tuple#2:const4 null_mult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transpose#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_makeBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transpose#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_attach#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_mult#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#abs :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_matrixMult'#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_mkBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transpose#3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_attach#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_lineMult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 const :: a const1 :: b const2 :: c const3 :: d Rewrite Strategy: INNERMOST ---------------------------------------- (27) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (28) 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: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] attach(@line, @m) -> attach#1(@line, @m) [1] attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) [1] attach#1(nil, @m) -> nil [1] attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) [1] attach#2(nil, @x, @xs) -> nil [1] lineMult(@l, @m2) -> lineMult#1(@m2, @l) [1] lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) [1] lineMult#1(nil, @l) -> nil [1] m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) [1] m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) [1] m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) [1] m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) [1] makeBase(@m) -> makeBase#1(@m) [1] makeBase#1(::(@l, @m')) -> mkBase(@l) [1] makeBase#1(nil) -> nil [1] matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase#1(@m2))) [2] matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) [1] matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) [1] matrixMult'#1(nil, @m2) -> nil [1] matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult'(@m1, transAcc(@m2, makeBase(@m2))), @m3) [2] matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) [1] matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult'(@acc, transAcc(@m, makeBase(@m))), @ms) [2] matrixMultList#1(nil, @acc) -> @acc [1] matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose#1(@m2, @m2)) [2] mkBase(@m) -> mkBase#1(@m) [1] mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) [1] mkBase#1(nil) -> nil [1] mult(@l1, @l2) -> mult#1(@l1, @l2) [1] mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) [1] mult#1(nil, @l2) -> #abs(#0) [1] mult#2(::(@y, @ys), @x, @xs) -> plus(#mult(@x, @y), mult#1(@xs, @ys)) [3] mult#2(nil, @x, @xs) -> #abs(#0) [1] split(@m) -> split#1(@m) [1] split#1(::(@l, @ls)) -> split#2(@l, @ls) [1] split#1(nil) -> tuple#2(nil, nil) [1] split#2(::(@x, @xs), @ls) -> split#3(split#1(@ls), @x, @xs) [2] split#2(nil, @ls) -> tuple#2(nil, nil) [1] split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) [1] transAcc(@m, @base) -> transAcc#1(@m, @base) [1] transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc#1(@m', @base)) [2] transAcc#1(nil, @base) -> @base [1] transpose(@m) -> transpose#1(@m, @m) [1] transpose#1(::(@xs, @xss), @m) -> transpose#2(split#1(@m)) [2] transpose#1(nil, @m) -> nil [1] transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) [1] transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) [1] transpose#3(nil, @l) -> nil [1] transpose'(@m) -> transAcc(@m, makeBase#1(@m)) [2] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(#0))), @y) -> #pred(#succ(@y)) [0] #add(#neg(#s(#s(#s(@x')))), @y) -> #pred(#succ(#add(#pos(#s(@x')), @y))) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(null_#add) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(#0))), @y) -> #succ(#succ(@y)) [0] #add(#pos(#s(#s(#s(@x'')))), @y) -> #succ(#succ(#add(#pos(#s(@x'')), @y))) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(null_#add) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(#0), @y) -> #add(#pos(@y), #0) [0] #natmult(#s(#s(@x1)), @y) -> #add(#pos(@y), #add(#pos(@y), #natmult(@x1, @y))) [0] #natmult(#s(@x), @y) -> #add(#pos(@y), null_#natmult) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] split#1(v0) -> const4 [0] mult#1(v0, v1) -> null_mult#1 [0] transpose#1(v0, v1) -> null_transpose#1 [0] makeBase#1(v0) -> null_makeBase#1 [0] split#2(v0, v1) -> const4 [0] transpose#2(v0) -> null_transpose#2 [0] attach#1(v0, v1) -> null_attach#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] #abs(v0) -> null_#abs [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] mkBase#1(v0) -> null_mkBase#1 [0] transpose#3(v0, v1) -> null_transpose#3 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] split#3(v0, v1, v2) -> const4 [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] The TRS has the following type information: #abs :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #0 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #neg :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #pos :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #s :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 times :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 plus :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #add :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 attach :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 attach#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 :: :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 attach#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 nil :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 lineMult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 lineMult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m1 :: a -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m2 :: b -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m3 :: c -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 m4 :: d -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 makeBase :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 makeBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mkBase :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult' :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transAcc :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult'#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMult3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMultList :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMultList#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 matrixMultOld :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mkBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 mult#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 split :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 split#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 split#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 tuple#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 split#3 :: tuple#2:const4 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> tuple#2:const4 transAcc#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose#2 :: tuple#2:const4 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose#3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 transpose' :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #pred :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #succ :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 #natmult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#add :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#natmult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#pred :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#succ :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transAcc#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 const4 :: tuple#2:const4 null_mult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transpose#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_makeBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transpose#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_attach#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_mult#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_#abs :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_matrixMult'#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_mkBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_transpose#3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_attach#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 null_lineMult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_transAcc#1:null_mult#1:null_transpose#1:null_makeBase#1:null_transpose#2:null_attach#1:null_mult#2:null_#abs:null_matrixMult'#1:null_mkBase#1:null_transpose#3:null_attach#2:null_lineMult#1 const :: a const1 :: b const2 :: c const3 :: d Rewrite Strategy: INNERMOST ---------------------------------------- (29) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: #0 => 0 nil => 1 null_#add => 0 null_#mult => 0 null_#natmult => 0 null_#pred => 0 null_#succ => 0 null_transAcc#1 => 0 const4 => 0 null_mult#1 => 0 null_transpose#1 => 0 null_makeBase#1 => 0 null_transpose#2 => 0 null_attach#1 => 0 null_mult#2 => 0 null_#abs => 0 null_matrixMult'#1 => 0 null_mkBase#1 => 0 null_transpose#3 => 0 null_attach#2 => 0 null_lineMult#1 => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #succ(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #add(z, z') -{ 0 }-> #succ(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 #add(z, z') -{ 0 }-> #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #add(z, z') -{ 0 }-> #pred(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) attach(z, z') -{ 1 }-> attach#1(@line, @m) :|: @m >= 0, @line >= 0, z' = @m, z = @line attach#1(z, z') -{ 1 }-> attach#2(@m, @x, @xs) :|: @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @m, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: @m >= 0, z = 1, z' = @m attach#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#2(z, z', z'') -{ 1 }-> 1 :|: @x >= 0, z = 1, @xs >= 0, z' = @x, z'' = @xs attach#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + @x + @l) + attach(@xs, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @x >= 0, @xs >= 0, z' = @x, z'' = @xs lineMult(z, z') -{ 1 }-> lineMult#1(@m2, @l) :|: z = @l, @l >= 0, @m2 >= 0, z' = @m2 lineMult#1(z, z') -{ 1 }-> 1 :|: @l >= 0, z = 1, z' = @l lineMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 1 }-> 1 + mult(@l, @x) + lineMult(@l, @xs) :|: @l >= 0, @x >= 0, z = 1 + @x + @xs, z' = @l, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z = @x, @x >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z = @x, @x >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z = @x, @x >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z = @x, @x >= 0 makeBase(z) -{ 1 }-> makeBase#1(@m) :|: @m >= 0, z = @m makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 matrixMult(z, z') -{ 2 }-> matrixMult'(@m1, transAcc(@m2, makeBase#1(@m2))) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult'#1(z, z') -{ 1 }-> 1 :|: @m2 >= 0, z = 1, z' = @m2 matrixMult'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, @m2) + matrixMult'(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(@m1, transAcc(@m2, makeBase(@m2))), @m3) :|: @m1 >= 0, @m2 >= 0, @m3 >= 0, z'' = @m3, z = @m1, z' = @m2 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(@mm, @acc) :|: @acc >= 0, z' = @mm, z = @acc, @mm >= 0 matrixMultList#1(z, z') -{ 1 }-> @acc :|: @acc >= 0, z = 1, z' = @acc matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(@acc, transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, @acc >= 0, z = 1 + @m + @ms, z' = @acc, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(@m1, transpose#1(@m2, @m2)) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 mkBase(z) -{ 1 }-> mkBase#1(@m) :|: @m >= 0, z = @m mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(@l1, @l2) :|: @l1 >= 0, z' = @l2, @l2 >= 0, z = @l1 mult#1(z, z') -{ 1 }-> mult#2(@l2, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, @l2 >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 1 }-> #abs(0) :|: z' = @l2, z = 1, @l2 >= 0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(@x, @y), mult#1(@xs, @ys)) :|: z = 1 + @y + @ys, @x >= 0, @xs >= 0, @y >= 0, z' = @x, z'' = @xs, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult#2(z, z', z'') -{ 1 }-> #abs(0) :|: @x >= 0, z = 1, @xs >= 0, z' = @x, z'' = @xs plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 split(z) -{ 1 }-> split#1(@m) :|: @m >= 0, z = @m split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(@ls), @x, @xs) :|: @ls >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = @ls split#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: @ls >= 0, z = 1, z' = @ls split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + @x + @ys) + (1 + @xs + @m') :|: @x >= 0, z = 1 + @ys + @m', @m' >= 0, @xs >= 0, z' = @x, z'' = @xs, @ys >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(@m, @base) :|: @m >= 0, z' = @base, z = @m, @base >= 0 transAcc#1(z, z') -{ 1 }-> @base :|: z = 1, z' = @base, @base >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', @base)) :|: @l >= 0, z' = @base, @m' >= 0, z = 1 + @l + @m', @base >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose(z) -{ 1 }-> transpose#1(@m, @m) :|: @m >= 0, z = @m transpose#1(z, z') -{ 2 }-> transpose#2(split#1(@m)) :|: @m >= 0, z' = @m, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: @m >= 0, z = 1, z' = @m transpose#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#3(z, z') -{ 1 }-> 1 :|: @l >= 0, z = 1, z' = @l transpose#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#3(z, z') -{ 1 }-> 1 + @l + transpose(1 + @y + @ys) :|: @l >= 0, z = 1 + @y + @ys, z' = @l, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(@m, makeBase#1(@m)) :|: @m >= 0, z = @m ---------------------------------------- (31) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + @x + @ys) + (1 + @xs + @m') :|: @x >= 0, z = 1 + @ys + @m', @m' >= 0, @xs >= 0, z' = @x, z'' = @xs, @ys >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, v0 >= 0, @y = v0 #add(z, z') -{ 0 }-> 0 :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), v0 >= 0, 1 + (1 + @x) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), 1 + (1 + @x) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), v0 >= 0, 1 + (1 + (1 + @x)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + @x))) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x) #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) attach(z, z') -{ 1 }-> attach#1(@line, @m) :|: @m >= 0, @line >= 0, z' = @m, z = @line attach#1(z, z') -{ 1 }-> attach#2(@m, @x, @xs) :|: @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @m, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: @m >= 0, z = 1, z' = @m attach#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#2(z, z', z'') -{ 1 }-> 1 :|: @x >= 0, z = 1, @xs >= 0, z' = @x, z'' = @xs attach#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + @x + @l) + attach(@xs, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @x >= 0, @xs >= 0, z' = @x, z'' = @xs lineMult(z, z') -{ 1 }-> lineMult#1(@m2, @l) :|: z = @l, @l >= 0, @m2 >= 0, z' = @m2 lineMult#1(z, z') -{ 1 }-> 1 :|: @l >= 0, z = 1, z' = @l lineMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 1 }-> 1 + mult(@l, @x) + lineMult(@l, @xs) :|: @l >= 0, @x >= 0, z = 1 + @x + @xs, z' = @l, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z = @x, @x >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z = @x, @x >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z = @x, @x >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z = @x, @x >= 0 makeBase(z) -{ 1 }-> makeBase#1(@m) :|: @m >= 0, z = @m makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 matrixMult(z, z') -{ 2 }-> matrixMult'(@m1, transAcc(@m2, makeBase#1(@m2))) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult'#1(z, z') -{ 1 }-> 1 :|: @m2 >= 0, z = 1, z' = @m2 matrixMult'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, @m2) + matrixMult'(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(@m1, transAcc(@m2, makeBase(@m2))), @m3) :|: @m1 >= 0, @m2 >= 0, @m3 >= 0, z'' = @m3, z = @m1, z' = @m2 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(@mm, @acc) :|: @acc >= 0, z' = @mm, z = @acc, @mm >= 0 matrixMultList#1(z, z') -{ 1 }-> @acc :|: @acc >= 0, z = 1, z' = @acc matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(@acc, transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, @acc >= 0, z = 1 + @m + @ms, z' = @acc, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(@m1, transpose#1(@m2, @m2)) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 mkBase(z) -{ 1 }-> mkBase#1(@m) :|: @m >= 0, z = @m mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(@l1, @l2) :|: @l1 >= 0, z' = @l2, @l2 >= 0, z = @l1 mult#1(z, z') -{ 1 }-> mult#2(@l2, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, @l2 >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 2 }-> 0 :|: z' = @l2, z = 1, @l2 >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z' = @l2, z = 1, @l2 >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(@x, @y), mult#1(@xs, @ys)) :|: z = 1 + @y + @ys, @x >= 0, @xs >= 0, @y >= 0, z' = @x, z'' = @xs, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: @x >= 0, z = 1, @xs >= 0, z' = @x, z'' = @xs, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: @x >= 0, z = 1, @xs >= 0, z' = @x, z'' = @xs, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 split(z) -{ 1 }-> split#1(@m) :|: @m >= 0, z = @m split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(@ls), @x, @xs) :|: @ls >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = @ls split#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: @ls >= 0, z = 1, z' = @ls split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + @x + @ys) + (1 + @xs + @m') :|: @x >= 0, z = 1 + @ys + @m', @m' >= 0, @xs >= 0, z' = @x, z'' = @xs, @ys >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(@m, @base) :|: @m >= 0, z' = @base, z = @m, @base >= 0 transAcc#1(z, z') -{ 1 }-> @base :|: z = 1, z' = @base, @base >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', @base)) :|: @l >= 0, z' = @base, @m' >= 0, z = 1 + @l + @m', @base >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose(z) -{ 1 }-> transpose#1(@m, @m) :|: @m >= 0, z = @m transpose#1(z, z') -{ 2 }-> transpose#2(split#1(@m)) :|: @m >= 0, z' = @m, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: @m >= 0, z = 1, z' = @m transpose#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#3(z, z') -{ 1 }-> 1 :|: @l >= 0, z = 1, z' = @l transpose#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#3(z, z') -{ 1 }-> 1 + @l + transpose(1 + @y + @ys) :|: @l >= 0, z = 1 + @y + @ys, z' = @l, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(@m, makeBase#1(@m)) :|: @m >= 0, z = @m ---------------------------------------- (33) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 ---------------------------------------- (35) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { split#3 } { #pred } { attach#2, attach, attach#1 } { #abs } { #succ } { mkBase, mkBase#1 } { split#2, split#1 } { #add } { transAcc#1 } { m4 } { m3 } { m2 } { m1 } { makeBase#1 } { transpose#3, transpose#2, transpose#1, transpose } { split } { #natmult } { plus } { transAcc } { makeBase } { #mult } { transpose' } { times } { mult#1, mult#2 } { mult } { lineMult, lineMult#1 } { matrixMult', matrixMult'#1 } { matrixMultOld } { matrixMult } { matrixMultList, matrixMultList#1 } { matrixMult3 } ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {split#3}, {#pred}, {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} ---------------------------------------- (37) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {split#3}, {#pred}, {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} ---------------------------------------- (39) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: split#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z + z' + z'' ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {split#3}, {#pred}, {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: ?, size: O(n^1) [2 + z + z' + z''] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: split#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#pred}, {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] ---------------------------------------- (43) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#pred}, {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] ---------------------------------------- (45) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#pred}, {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (49) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (51) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: attach#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z + z' + z'' Computed SIZE bound using CoFloCo for: attach after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' Computed SIZE bound using CoFloCo for: attach#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {attach#2,attach,attach#1}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: ?, size: O(n^1) [2 + z + z' + z''] attach: runtime: ?, size: O(n^1) [1 + z + z'] attach#1: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: attach#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 6 + 3*z'' Computed RUNTIME bound using CoFloCo for: attach after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 5 + 3*z Computed RUNTIME bound using CoFloCo for: attach#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + 3*z ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 1 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach#1(z, z') -{ 1 }-> attach#2(z', @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + z' + @l) + attach(z'', @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] ---------------------------------------- (55) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] ---------------------------------------- (57) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #abs after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #abs 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: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (61) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (63) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (67) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (69) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: mkBase after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z Computed SIZE bound using KoAT for: mkBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: ?, size: O(n^1) [2*z] mkBase#1: runtime: ?, size: O(n^1) [2*z] ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: mkBase after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + 2*z Computed RUNTIME bound using CoFloCo for: mkBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + 2*z ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 1 }-> mkBase#1(z) :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] ---------------------------------------- (73) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] ---------------------------------------- (75) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: split#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + z + z' Computed SIZE bound using CoFloCo for: split#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {split#2,split#1}, {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: ?, size: O(n^1) [4 + z + z'] split#1: runtime: ?, size: O(n^1) [3 + z] ---------------------------------------- (77) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: split#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 6 + 8*z' Computed RUNTIME bound using CoFloCo for: split#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + 8*z ---------------------------------------- (78) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 1 }-> split#1(z) :|: z >= 0 split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 2 }-> split#3(split#1(z'), @x, @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 2 }-> transpose#2(split#1(z')) :|: z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] ---------------------------------------- (79) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] ---------------------------------------- (81) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #add after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {#add}, {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (83) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #add after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (84) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (85) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (86) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (87) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: transAcc#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (88) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {transAcc#1}, {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (89) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: transAcc#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + 7*z ---------------------------------------- (90) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(z, z') :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 2 }-> attach(@l, transAcc#1(@m', z')) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] ---------------------------------------- (91) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (92) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] ---------------------------------------- (93) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: m4 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 31 ---------------------------------------- (94) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m4}, {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: ?, size: O(1) [31] ---------------------------------------- (95) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: m4 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 5 ---------------------------------------- (96) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] ---------------------------------------- (97) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (98) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] ---------------------------------------- (99) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: m3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 54 ---------------------------------------- (100) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m3}, {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: ?, size: O(1) [54] ---------------------------------------- (101) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: m3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 9 ---------------------------------------- (102) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] ---------------------------------------- (103) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (104) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] ---------------------------------------- (105) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: m2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 42 ---------------------------------------- (106) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m2}, {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: ?, size: O(1) [42] ---------------------------------------- (107) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: m2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (108) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] ---------------------------------------- (109) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (110) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] ---------------------------------------- (111) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: m1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 38 ---------------------------------------- (112) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {m1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: ?, size: O(1) [38] ---------------------------------------- (113) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: m1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 7 ---------------------------------------- (114) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: O(1) [7], size: O(1) [38] ---------------------------------------- (115) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (116) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: O(1) [7], size: O(1) [38] ---------------------------------------- (117) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: makeBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z ---------------------------------------- (118) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: O(1) [7], size: O(1) [38] makeBase#1: runtime: ?, size: O(n^1) [2*z] ---------------------------------------- (119) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: makeBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + 2*z ---------------------------------------- (120) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 1 }-> makeBase#1(z) :|: z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 2 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 2 }-> transAcc(z, makeBase#1(z)) :|: z >= 0 Function symbols to be analyzed: {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: O(1) [7], size: O(1) [38] makeBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] ---------------------------------------- (121) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (122) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 4 + 2*z }-> s50 :|: s50 >= 0, s50 <= 2 * z, z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 5 + 2*z' }-> matrixMult'(z, transAcc(z', s51)) :|: s51 >= 0, s51 <= 2 * z', z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 5 + 2*z }-> transAcc(z, s52) :|: s52 >= 0, s52 <= 2 * z, z >= 0 Function symbols to be analyzed: {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: O(1) [7], size: O(1) [38] makeBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] ---------------------------------------- (123) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: transpose#3 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: transpose#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: transpose#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: transpose after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (124) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 4 + 2*z }-> s50 :|: s50 >= 0, s50 <= 2 * z, z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 5 + 2*z' }-> matrixMult'(z, transAcc(z', s51)) :|: s51 >= 0, s51 <= 2 * z', z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 5 + 2*z }-> transAcc(z, s52) :|: s52 >= 0, s52 <= 2 * z, z >= 0 Function symbols to be analyzed: {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: O(1) [7], size: O(1) [38] makeBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] transpose#3: runtime: ?, size: INF transpose#2: runtime: ?, size: INF transpose#1: runtime: ?, size: INF transpose: runtime: ?, size: INF ---------------------------------------- (125) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: transpose#3 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (126) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s43 :|: s41 >= 0, s41 <= 2 * (1 + (1 + (z - 4))) + z', s42 >= 0, s42 <= s41 + 2, s43 >= 0, s43 <= s42 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> s46 :|: s44 >= 0, s44 <= 2 * (1 + (1 + (z - 4))) + z', s45 >= 0, s45 <= s44 + 2, s46 >= 0, s46 <= s45 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s39 :|: s39 >= 0, s39 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 attach(z, z') -{ 5 + 3*z }-> s3 :|: s3 >= 0, s3 <= z + z' + 1, z' >= 0, z >= 0 attach#1(z, z') -{ 7 + 3*@xs }-> s4 :|: s4 >= 0, s4 <= z' + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 1 }-> 1 :|: z' >= 0, z = 1, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 6 + 3*z'' }-> 1 + (1 + z' + @l) + s5 :|: s5 >= 0, s5 <= z'' + @ls + 1, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0 lineMult(z, z') -{ 1 }-> lineMult#1(z', z) :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 1 }-> 1 + mult(z', @x) + lineMult(z', @xs) :|: z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 m1(z) -{ 7 }-> 1 + (1 + s6 + (1 + s7 + (1 + s8 + 1))) + (1 + (1 + s9 + (1 + s10 + (1 + s11 + 1))) + 1) :|: s6 >= 0, s6 <= 1 + (1 + 0) + 1, s7 >= 0, s7 <= 1 + (1 + (1 + 0)) + 1, s8 >= 0, s8 <= 1 + (1 + (1 + (1 + 0))) + 1, s9 >= 0, s9 <= 1 + (1 + (1 + 0)) + 1, s10 >= 0, s10 <= 1 + (1 + (1 + (1 + 0))) + 1, s11 >= 0, s11 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 m2(z) -{ 7 }-> 1 + (1 + s12 + (1 + s13 + 1)) + (1 + (1 + s14 + (1 + s15 + 1)) + (1 + (1 + s16 + (1 + s17 + 1)) + 1)) :|: s12 >= 0, s12 <= 1 + (1 + 0) + 1, s13 >= 0, s13 <= 1 + (1 + (1 + 0)) + 1, s14 >= 0, s14 <= 1 + (1 + (1 + 0)) + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + 0))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m3(z) -{ 9 }-> 1 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + 1)))) + (1 + (1 + s22 + (1 + s23 + (1 + s24 + (1 + s25 + 1)))) + 1) :|: s18 >= 0, s18 <= 1 + (1 + 0) + 1, s19 >= 0, s19 <= 1 + (1 + (1 + 0)) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + (1 + 0))) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + 0)) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, s24 >= 0, s24 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, z >= 0 m4(z) -{ 5 }-> 1 + (1 + s26 + 1) + (1 + (1 + s27 + 1) + (1 + (1 + s28 + 1) + (1 + (1 + s29 + 1) + 1))) :|: s26 >= 0, s26 <= 1 + (1 + 0) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + 0)) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + 0))) + 1, s29 >= 0, s29 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, z >= 0 makeBase(z) -{ 4 + 2*z }-> s50 :|: s50 >= 0, s50 <= 2 * z, z >= 0 makeBase#1(z) -{ 5 + 2*@l }-> s30 :|: s30 >= 0, s30 <= 2 * @l, @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 5 + 2*z' }-> matrixMult'(z, transAcc(z', s51)) :|: s51 >= 0, s51 <= 2 * z', z >= 0, z' >= 0 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(z, z') :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, z') + matrixMult'(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 matrixMult3(z, z', z'') -{ 2 }-> matrixMult(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z >= 0, z' >= 0, z'' >= 0 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(z', z) :|: z >= 0, z' >= 0 matrixMultList#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 1 matrixMultList#1(z, z') -{ 2 }-> matrixMultList(matrixMult'(z', transAcc(@m, makeBase(@m))), @ms) :|: @m >= 0, z' >= 0, z = 1 + @m + @ms, @ms >= 0 matrixMultOld(z, z') -{ 2 }-> matrixMult'(z, transpose#1(z', z')) :|: z >= 0, z' >= 0 mkBase(z) -{ 4 + 2*z }-> s31 :|: s31 >= 0, s31 <= 2 * z, z >= 0 mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 5 + 2*@m' }-> 1 + 1 + s32 :|: s32 >= 0, s32 <= 2 * @m', @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(z, z') :|: z >= 0, z' >= 0 mult#1(z, z') -{ 1 }-> mult#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 2 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 1 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 3 }-> plus(#mult(z', @y), mult#1(z'', @ys)) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 2 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, 0 = 0 mult#2(z, z', z'') -{ 1 }-> 0 :|: z' >= 0, z = 1, z'' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 1 }-> s38 :|: s38 >= 0, s38 <= 2 * z + z', z >= 0, z' >= 0 split(z) -{ 2 + 8*z }-> s33 :|: s33 >= 0, s33 <= z + 3, z >= 0 split#1(z) -{ 7 + 8*@ls }-> s34 :|: s34 >= 0, s34 <= @l + @ls + 4, z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 4 + 8*z' }-> s37 :|: s36 >= 0, s36 <= z' + 3, s37 >= 0, s37 <= s36 + @x + @xs + 2, z' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: z' >= 0, z = 1 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + z' + @ys) + (1 + z'' + @m') :|: z' >= 0, z = 1 + @ys + @m', @m' >= 0, z'' >= 0, @ys >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 transAcc(z, z') -{ 9 + 7*z }-> s47 :|: s47 >= 0, s47 <= z + z', z >= 0, z' >= 0 transAcc#1(z, z') -{ 15 + 3*@l + 7*@m' }-> s49 :|: s48 >= 0, s48 <= @m' + z', s49 >= 0, s49 <= @l + s48 + 1, @l >= 0, @m' >= 0, z = 1 + @l + @m', z' >= 0 transAcc#1(z, z') -{ 1 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 1 }-> transpose#1(z, z) :|: z >= 0 transpose#1(z, z') -{ 3 + 8*z' }-> transpose#2(s35) :|: s35 >= 0, s35 <= z' + 3, z' >= 0, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 1 }-> 1 + z' + transpose(1 + @y + @ys) :|: z' >= 0, z = 1 + @y + @ys, @y >= 0, @ys >= 0 transpose'(z) -{ 5 + 2*z }-> transAcc(z, s52) :|: s52 >= 0, s52 <= 2 * z, z >= 0 Function symbols to be analyzed: {transpose#3,transpose#2,transpose#1,transpose}, {split}, {#natmult}, {plus}, {transAcc}, {makeBase}, {#mult}, {transpose'}, {times}, {mult#1,mult#2}, {mult}, {lineMult,lineMult#1}, {matrixMult',matrixMult'#1}, {matrixMultOld}, {matrixMult}, {matrixMultList,matrixMultList#1}, {matrixMult3} Previous analysis results are: split#3: runtime: O(1) [1], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] attach#2: runtime: O(n^1) [6 + 3*z''], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(n^1) [5 + 3*z], size: O(n^1) [1 + z + z'] attach#1: runtime: O(n^1) [4 + 3*z], size: O(n^1) [1 + z + z'] #abs: runtime: O(1) [1], size: O(n^1) [1 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(n^1) [4 + 2*z], size: O(n^1) [2*z] mkBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] split#2: runtime: O(n^1) [6 + 8*z'], size: O(n^1) [4 + z + z'] split#1: runtime: O(n^1) [1 + 8*z], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] transAcc#1: runtime: O(n^1) [8 + 7*z], size: O(n^1) [z + z'] m4: runtime: O(1) [5], size: O(1) [31] m3: runtime: O(1) [9], size: O(1) [54] m2: runtime: O(1) [7], size: O(1) [42] m1: runtime: O(1) [7], size: O(1) [38] makeBase#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [2*z] transpose#3: runtime: INF, size: INF transpose#2: runtime: ?, size: INF transpose#1: runtime: ?, size: INF transpose: runtime: ?, size: INF ---------------------------------------- (127) 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: #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] #abs(v0) -> null_#abs [0] attach#1(v0, v1) -> null_attach#1 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] makeBase#1(v0) -> null_makeBase#1 [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] matrixMultList#1(v0, v1) -> null_matrixMultList#1 [0] mkBase#1(v0) -> null_mkBase#1 [0] mult#1(v0, v1) -> null_mult#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] split#1(v0) -> null_split#1 [0] split#2(v0, v1) -> null_split#2 [0] split#3(v0, v1, v2) -> null_split#3 [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] transpose#1(v0, v1) -> null_transpose#1 [0] transpose#2(v0) -> null_transpose#2 [0] transpose#3(v0, v1) -> null_transpose#3 [0] And the following fresh constants: null_#add, null_#mult, null_#natmult, null_#pred, null_#succ, null_#abs, null_attach#1, null_attach#2, null_lineMult#1, null_makeBase#1, null_matrixMult'#1, null_matrixMultList#1, null_mkBase#1, null_mult#1, null_mult#2, null_split#1, null_split#2, null_split#3, null_transAcc#1, null_transpose#1, null_transpose#2, null_transpose#3, const, const1, const2, const3 ---------------------------------------- (128) 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: #abs(#0) -> #0 [1] #abs(#neg(@x)) -> #pos(@x) [1] #abs(#pos(@x)) -> #pos(@x) [1] #abs(#s(@x)) -> #pos(#s(@x)) [1] times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] attach(@line, @m) -> attach#1(@line, @m) [1] attach#1(::(@x, @xs), @m) -> attach#2(@m, @x, @xs) [1] attach#1(nil, @m) -> nil [1] attach#2(::(@l, @ls), @x, @xs) -> ::(::(@x, @l), attach(@xs, @ls)) [1] attach#2(nil, @x, @xs) -> nil [1] lineMult(@l, @m2) -> lineMult#1(@m2, @l) [1] lineMult#1(::(@x, @xs), @l) -> ::(mult(@l, @x), lineMult(@l, @xs)) [1] lineMult#1(nil, @l) -> nil [1] m1(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) [1] m2(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) [1] m3(@x) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) [1] m4(@x) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) [1] makeBase(@m) -> makeBase#1(@m) [1] makeBase#1(::(@l, @m')) -> mkBase(@l) [1] makeBase#1(nil) -> nil [1] matrixMult(@m1, @m2) -> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) [1] matrixMult'(@m1, @m2) -> matrixMult'#1(@m1, @m2) [1] matrixMult'#1(::(@l, @ls), @m2) -> ::(lineMult(@l, @m2), matrixMult'(@ls, @m2)) [1] matrixMult'#1(nil, @m2) -> nil [1] matrixMult3(@m1, @m2, @m3) -> matrixMult(matrixMult(@m1, @m2), @m3) [1] matrixMultList(@acc, @mm) -> matrixMultList#1(@mm, @acc) [1] matrixMultList#1(::(@m, @ms), @acc) -> matrixMultList(matrixMult(@acc, @m), @ms) [1] matrixMultList#1(nil, @acc) -> @acc [1] matrixMultOld(@m1, @m2) -> matrixMult'(@m1, transpose(@m2)) [1] mkBase(@m) -> mkBase#1(@m) [1] mkBase#1(::(@l, @m')) -> ::(nil, mkBase(@m')) [1] mkBase#1(nil) -> nil [1] mult(@l1, @l2) -> mult#1(@l1, @l2) [1] mult#1(::(@x, @xs), @l2) -> mult#2(@l2, @x, @xs) [1] mult#1(nil, @l2) -> #abs(#0) [1] mult#2(::(@y, @ys), @x, @xs) -> plus(times(@x, @y), mult(@xs, @ys)) [1] mult#2(nil, @x, @xs) -> #abs(#0) [1] split(@m) -> split#1(@m) [1] split#1(::(@l, @ls)) -> split#2(@l, @ls) [1] split#1(nil) -> tuple#2(nil, nil) [1] split#2(::(@x, @xs), @ls) -> split#3(split(@ls), @x, @xs) [1] split#2(nil, @ls) -> tuple#2(nil, nil) [1] split#3(tuple#2(@ys, @m'), @x, @xs) -> tuple#2(::(@x, @ys), ::(@xs, @m')) [1] transAcc(@m, @base) -> transAcc#1(@m, @base) [1] transAcc#1(::(@l, @m'), @base) -> attach(@l, transAcc(@m', @base)) [1] transAcc#1(nil, @base) -> @base [1] transpose(@m) -> transpose#1(@m, @m) [1] transpose#1(::(@xs, @xss), @m) -> transpose#2(split(@m)) [1] transpose#1(nil, @m) -> nil [1] transpose#2(tuple#2(@l, @m')) -> transpose#3(@m', @l) [1] transpose#3(::(@y, @ys), @l) -> ::(@l, transpose(::(@y, @ys))) [1] transpose#3(nil, @l) -> nil [1] transpose'(@m) -> transAcc(@m, makeBase(@m)) [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] #abs(v0) -> null_#abs [0] attach#1(v0, v1) -> null_attach#1 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] makeBase#1(v0) -> null_makeBase#1 [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] matrixMultList#1(v0, v1) -> null_matrixMultList#1 [0] mkBase#1(v0) -> null_mkBase#1 [0] mult#1(v0, v1) -> null_mult#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] split#1(v0) -> null_split#1 [0] split#2(v0, v1) -> null_split#2 [0] split#3(v0, v1, v2) -> null_split#3 [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] transpose#1(v0, v1) -> null_transpose#1 [0] transpose#2(v0) -> null_transpose#2 [0] transpose#3(v0, v1) -> null_transpose#3 [0] The TRS has the following type information: #abs :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #0 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #neg :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #pos :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #s :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 times :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 plus :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #add :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 attach :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 attach#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 :: :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 attach#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 nil :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 lineMult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 lineMult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 m1 :: a -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 m2 :: b -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 m3 :: c -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 m4 :: d -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 makeBase :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 makeBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 mkBase :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult' :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 transAcc :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult'#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 matrixMultList :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 matrixMultList#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 matrixMultOld :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 transpose :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 mkBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 mult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 mult#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 split :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split#1:null_split#2:null_split#3 split#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split#1:null_split#2:null_split#3 split#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split#1:null_split#2:null_split#3 tuple#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split#1:null_split#2:null_split#3 split#3 :: tuple#2:null_split#1:null_split#2:null_split#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split#1:null_split#2:null_split#3 transAcc#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 transpose#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 transpose#2 :: tuple#2:null_split#1:null_split#2:null_split#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 transpose#3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 transpose' :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #pred :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #succ :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 #natmult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 -> #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_#add :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_#mult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_#natmult :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_#pred :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_#succ :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_#abs :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_lineMult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_makeBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult'#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMultList#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_mkBase#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_split#1 :: tuple#2:null_split#1:null_split#2:null_split#3 null_split#2 :: tuple#2:null_split#1:null_split#2:null_split#3 null_split#3 :: tuple#2:null_split#1:null_split#2:null_split#3 null_transAcc#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#1 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#2 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#3 :: #0:#neg:#pos:#s::::nil:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_#abs:null_attach#1:null_attach#2:null_lineMult#1:null_makeBase#1:null_matrixMult'#1:null_matrixMultList#1:null_mkBase#1:null_mult#1:null_mult#2:null_transAcc#1:null_transpose#1:null_transpose#2:null_transpose#3 const :: a const1 :: b const2 :: c const3 :: d Rewrite Strategy: INNERMOST ---------------------------------------- (129) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: #0 => 0 nil => 1 null_#add => 0 null_#mult => 0 null_#natmult => 0 null_#pred => 0 null_#succ => 0 null_#abs => 0 null_attach#1 => 0 null_attach#2 => 0 null_lineMult#1 => 0 null_makeBase#1 => 0 null_matrixMult'#1 => 0 null_matrixMultList#1 => 0 null_mkBase#1 => 0 null_mult#1 => 0 null_mult#2 => 0 null_split#1 => 0 null_split#2 => 0 null_split#3 => 0 null_transAcc#1 => 0 null_transpose#1 => 0 null_transpose#2 => 0 null_transpose#3 => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 ---------------------------------------- (130) Obligation: Complexity RNTS consisting of the following rules: #abs(z) -{ 1 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #succ(#add(1 + (1 + @x), @y)) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #add(z, z') -{ 0 }-> #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #pred(#add(1 + (1 + @x), @y)) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + @y, #natmult(@x, @y)) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) attach(z, z') -{ 1 }-> attach#1(@line, @m) :|: @m >= 0, @line >= 0, z' = @m, z = @line attach#1(z, z') -{ 1 }-> attach#2(@m, @x, @xs) :|: @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @m, @xs >= 0 attach#1(z, z') -{ 1 }-> 1 :|: @m >= 0, z = 1, z' = @m attach#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#2(z, z', z'') -{ 1 }-> 1 :|: @x >= 0, z = 1, @xs >= 0, z' = @x, z'' = @xs attach#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 attach#2(z, z', z'') -{ 1 }-> 1 + (1 + @x + @l) + attach(@xs, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @x >= 0, @xs >= 0, z' = @x, z'' = @xs lineMult(z, z') -{ 1 }-> lineMult#1(@m2, @l) :|: z = @l, @l >= 0, @m2 >= 0, z' = @m2 lineMult#1(z, z') -{ 1 }-> 1 :|: @l >= 0, z = 1, z' = @l lineMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 1 }-> 1 + mult(@l, @x) + lineMult(@l, @xs) :|: @l >= 0, @x >= 0, z = 1 + @x + @xs, z' = @l, @xs >= 0 m1(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1))) + 1) :|: z = @x, @x >= 0 m2(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1)) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)) + 1)) :|: z = @x, @x >= 0 m3(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1)))) + 1) :|: z = @x, @x >= 0 m4(z) -{ 1 }-> 1 + (1 + #abs(1 + (1 + 0)) + 1) + (1 + (1 + #abs(1 + (1 + (1 + 0))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 1) + (1 + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + 1) + 1))) :|: z = @x, @x >= 0 makeBase(z) -{ 1 }-> makeBase#1(@m) :|: @m >= 0, z = @m makeBase#1(z) -{ 1 }-> mkBase(@l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' makeBase#1(z) -{ 1 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 matrixMult(z, z') -{ 1 }-> matrixMult'(@m1, transAcc(@m2, makeBase(@m2))) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult'(z, z') -{ 1 }-> matrixMult'#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult'#1(z, z') -{ 1 }-> 1 :|: @m2 >= 0, z = 1, z' = @m2 matrixMult'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 1 }-> 1 + lineMult(@l, @m2) + matrixMult'(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 matrixMult3(z, z', z'') -{ 1 }-> matrixMult(matrixMult(@m1, @m2), @m3) :|: @m1 >= 0, @m2 >= 0, @m3 >= 0, z'' = @m3, z = @m1, z' = @m2 matrixMultList(z, z') -{ 1 }-> matrixMultList#1(@mm, @acc) :|: @acc >= 0, z' = @mm, z = @acc, @mm >= 0 matrixMultList#1(z, z') -{ 1 }-> @acc :|: @acc >= 0, z = 1, z' = @acc matrixMultList#1(z, z') -{ 1 }-> matrixMultList(matrixMult(@acc, @m), @ms) :|: @m >= 0, @acc >= 0, z = 1 + @m + @ms, z' = @acc, @ms >= 0 matrixMultList#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMultOld(z, z') -{ 1 }-> matrixMult'(@m1, transpose(@m2)) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 mkBase(z) -{ 1 }-> mkBase#1(@m) :|: @m >= 0, z = @m mkBase#1(z) -{ 1 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 1 }-> 1 + 1 + mkBase(@m') :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' mult(z, z') -{ 1 }-> mult#1(@l1, @l2) :|: @l1 >= 0, z' = @l2, @l2 >= 0, z = @l1 mult#1(z, z') -{ 1 }-> mult#2(@l2, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, @l2 >= 0, @xs >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 1 }-> #abs(0) :|: z' = @l2, z = 1, @l2 >= 0 mult#2(z, z', z'') -{ 1 }-> plus(times(@x, @y), mult(@xs, @ys)) :|: z = 1 + @y + @ys, @x >= 0, @xs >= 0, @y >= 0, z' = @x, z'' = @xs, @ys >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult#2(z, z', z'') -{ 1 }-> #abs(0) :|: @x >= 0, z = 1, @xs >= 0, z' = @x, z'' = @xs plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 split(z) -{ 1 }-> split#1(@m) :|: @m >= 0, z = @m split#1(z) -{ 1 }-> split#2(@l, @ls) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0 split#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 1 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 1 }-> split#3(split(@ls), @x, @xs) :|: @ls >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' = @ls split#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 split#2(z, z') -{ 1 }-> 1 + 1 + 1 :|: @ls >= 0, z = 1, z' = @ls split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 1 }-> 1 + (1 + @x + @ys) + (1 + @xs + @m') :|: @x >= 0, z = 1 + @ys + @m', @m' >= 0, @xs >= 0, z' = @x, z'' = @xs, @ys >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 transAcc(z, z') -{ 1 }-> transAcc#1(@m, @base) :|: @m >= 0, z' = @base, z = @m, @base >= 0 transAcc#1(z, z') -{ 1 }-> @base :|: z = 1, z' = @base, @base >= 0 transAcc#1(z, z') -{ 1 }-> attach(@l, transAcc(@m', @base)) :|: @l >= 0, z' = @base, @m' >= 0, z = 1 + @l + @m', @base >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose(z) -{ 1 }-> transpose#1(@m, @m) :|: @m >= 0, z = @m transpose#1(z, z') -{ 1 }-> transpose#2(split(@m)) :|: @m >= 0, z' = @m, @xs >= 0, @xss >= 0, z = 1 + @xs + @xss transpose#1(z, z') -{ 1 }-> 1 :|: @m >= 0, z = 1, z' = @m transpose#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#2(z) -{ 1 }-> transpose#3(@m', @l) :|: @l >= 0, @m' >= 0, z = 1 + @l + @m' transpose#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#3(z, z') -{ 1 }-> 1 :|: @l >= 0, z = 1, z' = @l transpose#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#3(z, z') -{ 1 }-> 1 + @l + transpose(1 + @y + @ys) :|: @l >= 0, z = 1 + @y + @ys, z' = @l, @y >= 0, @ys >= 0 transpose'(z) -{ 1 }-> transAcc(@m, makeBase(@m)) :|: @m >= 0, z = @m Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (131) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (132) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Tuples: #ADD(#0, z0) -> c #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 #MULT(#0, #pos(z0)) -> c7 #MULT(#neg(z0), #0) -> c8 #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #0) -> c11 #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#0, z0) -> c14 #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #PRED(#0) -> c16 #PRED(#neg(#s(z0))) -> c17 #PRED(#pos(#s(#0))) -> c18 #PRED(#pos(#s(#s(z0)))) -> c19 #SUCC(#0) -> c20 #SUCC(#neg(#s(#0))) -> c21 #SUCC(#neg(#s(#s(z0)))) -> c22 #SUCC(#pos(#s(z0))) -> c23 #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) S tuples: #ABS(#0) -> c24 #ABS(#neg(z0)) -> c25 #ABS(#pos(z0)) -> c26 #ABS(#s(z0)) -> c27 *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(nil, z0) -> c32 ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH#2(nil, z0, z1) -> c34 LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) LINEMULT#1(nil, z0) -> c38 M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M4(z0) -> c59(#ABS(#pos(#s(#0)))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MAKEBASE#1(nil) -> c65 MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'#1(nil, z0) -> c70 MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTLIST#1(nil, z0) -> c74 MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MKBASE#1(nil) -> c78 MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#1(nil, z0) -> c81(#ABS(#0)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#1(nil) -> c87 SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) SPLIT#2(nil, z0) -> c89 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC#1(nil, z0) -> c93 TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#1(nil, z0) -> c96 TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(nil, z0) -> c99 TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) K tuples:none Defined Rule Symbols: #abs_1, *_2, +_2, attach_2, attach#1_2, attach#2_3, lineMult_2, lineMult#1_2, m1_1, m2_1, m3_1, m4_1, makeBase_1, makeBase#1_1, matrixMult_2, matrixMult'_2, matrixMult'#1_2, matrixMult3_3, matrixMultList_2, matrixMultList#1_2, matrixMultOld_2, mkBase_1, mkBase#1_1, mult_2, mult#1_2, mult#2_3, split_1, split#1_1, split#2_2, split#3_3, transAcc_2, transAcc#1_2, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2, transpose'_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #ADD_2, #MULT_2, #NATMULT_2, #PRED_1, #SUCC_1, #ABS_1, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, M1_1, M2_1, M3_1, M4_1, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT_2, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULT3_3, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MATRIXMULTOLD_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, SPLIT#2_2, SPLIT#3_3, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, TRANSPOSE'_1 Compound Symbols: c, c1_1, c2_2, c3_1, c4_2, c5, c6, c7, c8, c9_1, c10_1, c11, c12_1, c13_1, c14, c15_2, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28_1, c29_1, c30_1, c31_1, c32, c33_1, c34, c35_1, c36_1, c37_1, c38, c39_1, c40_1, c41_1, c42_1, c43_1, c44_1, c45_1, c46_1, c47_1, c48_1, c49_1, c50_1, c51_1, c52_1, c53_1, c54_1, c55_1, c56_1, c57_1, c58_1, c59_1, c60_1, c61_1, c62_1, c63_1, c64_1, c65, c66_3, c67_1, c68_1, c69_1, c70, c71_2, c72_1, c73_2, c74, c75_2, c76_1, c77_1, c78, c79_1, c80_1, c81_1, c82_2, c83_2, c84_1, c85_1, c86_1, c87, c88_2, c89, c90, c91_1, c92_2, c93, c94_1, c95_2, c96, c97_1, c98_1, c99, c100_2 ---------------------------------------- (133) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 60 trailing nodes: #SUCC(#neg(#s(#0))) -> c21 M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) #SUCC(#neg(#s(#s(z0)))) -> c22 #ABS(#pos(z0)) -> c26 M2(z0) -> c45(#ABS(#pos(#s(#0)))) M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) #ABS(#0) -> c24 M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) MAKEBASE#1(nil) -> c65 #PRED(#0) -> c16 M3(z0) -> c51(#ABS(#pos(#s(#0)))) #MULT(#0, #pos(z0)) -> c7 M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) MKBASE#1(nil) -> c78 #PRED(#pos(#s(#0))) -> c18 #ABS(#neg(z0)) -> c25 TRANSPOSE#1(nil, z0) -> c96 M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) SPLIT#2(nil, z0) -> c89 M4(z0) -> c59(#ABS(#pos(#s(#0)))) TRANSPOSE#3(nil, z0) -> c99 #MULT(#0, #neg(z0)) -> c6 #PRED(#neg(#s(z0))) -> c17 SPLIT#1(nil) -> c87 #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #SUCC(#pos(#s(z0))) -> c23 M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) MATRIXMULT'#1(nil, z0) -> c70 M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) ATTACH#1(nil, z0) -> c32 #PRED(#pos(#s(#s(z0)))) -> c19 MULT#1(nil, z0) -> c81(#ABS(#0)) #MULT(#0, #0) -> c5 M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) MATRIXMULTLIST#1(nil, z0) -> c74 ATTACH#2(nil, z0, z1) -> c34 LINEMULT#1(nil, z0) -> c38 M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) #MULT(#pos(z0), #0) -> c11 #SUCC(#0) -> c20 #MULT(#neg(z0), #0) -> c8 M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) #ADD(#0, z0) -> c M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) #ABS(#s(z0)) -> c27 M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) #NATMULT(#0, z0) -> c14 TRANSACC#1(nil, z0) -> c93 M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) M1(z0) -> c39(#ABS(#pos(#s(#0)))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) ---------------------------------------- (134) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Tuples: #ADD(#neg(#s(#s(z0))), z1) -> c2(#PRED(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#SUCC(#add(#pos(#s(z0)), z1)), #ADD(#pos(#s(z0)), z1)) #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT#3(split(z2), z0, z1), SPLIT(z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) K tuples:none Defined Rule Symbols: #abs_1, *_2, +_2, attach_2, attach#1_2, attach#2_3, lineMult_2, lineMult#1_2, m1_1, m2_1, m3_1, m4_1, makeBase_1, makeBase#1_1, matrixMult_2, matrixMult'_2, matrixMult'#1_2, matrixMult3_3, matrixMultList_2, matrixMultList#1_2, matrixMultOld_2, mkBase_1, mkBase#1_1, mult_2, mult#1_2, mult#2_3, split_1, split#1_1, split#2_2, split#3_3, transAcc_2, transAcc#1_2, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2, transpose'_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #ADD_2, #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT_2, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULT3_3, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MATRIXMULTOLD_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, SPLIT#2_2, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, TRANSPOSE'_1 Compound Symbols: c2_2, c4_2, c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c66_3, c67_1, c68_1, c69_1, c71_2, c72_1, c73_2, c75_2, c76_1, c77_1, c79_1, c80_1, c82_2, c83_2, c85_1, c86_1, c88_2, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c100_2 ---------------------------------------- (135) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (136) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c66(MATRIXMULT'(z0, transAcc(z1, makeBase(z1))), TRANSACC(z1, makeBase(z1)), MAKEBASE(z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT3(z0, z1, z2) -> c71(MATRIXMULT(matrixMult(z0, z1), z2), MATRIXMULT(z0, z1)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MATRIXMULTOLD(z0, z1) -> c75(MATRIXMULT'(z0, transpose(z1)), TRANSPOSE(z1)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c82(+'(*(z2, z0), mult(z3, z1)), *'(z2, z0)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE'(z0) -> c100(TRANSACC(z0, makeBase(z0)), MAKEBASE(z0)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) K tuples:none Defined Rule Symbols: #abs_1, *_2, +_2, attach_2, attach#1_2, attach#2_3, lineMult_2, lineMult#1_2, m1_1, m2_1, m3_1, m4_1, makeBase_1, makeBase#1_1, matrixMult_2, matrixMult'_2, matrixMult'#1_2, matrixMult3_3, matrixMultList_2, matrixMultList#1_2, matrixMultOld_2, mkBase_1, mkBase#1_1, mult_2, mult#1_2, mult#2_3, split_1, split#1_1, split#2_2, split#3_3, transAcc_2, transAcc#1_2, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2, transpose'_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT_2, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULT3_3, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MATRIXMULTOLD_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, TRANSPOSE'_1, #ADD_2, SPLIT#2_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c66_3, c67_1, c68_1, c69_1, c71_2, c72_1, c73_2, c75_2, c76_1, c77_1, c79_1, c80_1, c82_2, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c100_2, c2_1, c4_1, c88_1 ---------------------------------------- (137) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (138) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(z0, z1)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MATRIXMULTOLD(z0, z1) -> c(TRANSPOSE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) TRANSPOSE'(z0) -> c(MAKEBASE(z0)) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(z0, z1)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MATRIXMULTOLD(z0, z1) -> c(TRANSPOSE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) TRANSPOSE'(z0) -> c(MAKEBASE(z0)) K tuples:none Defined Rule Symbols: #abs_1, *_2, +_2, attach_2, attach#1_2, attach#2_3, lineMult_2, lineMult#1_2, m1_1, m2_1, m3_1, m4_1, makeBase_1, makeBase#1_1, matrixMult_2, matrixMult'_2, matrixMult'#1_2, matrixMult3_3, matrixMultList_2, matrixMultList#1_2, matrixMultOld_2, mkBase_1, mkBase#1_1, mult_2, mult#1_2, mult#2_3, split_1, split#1_1, split#2_2, split#3_3, transAcc_2, transAcc#1_2, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2, transpose'_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (139) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 3 leading nodes: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(z0, z1)) TRANSPOSE'(z0) -> c(MAKEBASE(z0)) MATRIXMULTOLD(z0, z1) -> c(TRANSPOSE(z1)) ---------------------------------------- (140) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) K tuples:none Defined Rule Symbols: #abs_1, *_2, +_2, attach_2, attach#1_2, attach#2_3, lineMult_2, lineMult#1_2, m1_1, m2_1, m3_1, m4_1, makeBase_1, makeBase#1_1, matrixMult_2, matrixMult'_2, matrixMult'#1_2, matrixMult3_3, matrixMultList_2, matrixMultList#1_2, matrixMultOld_2, mkBase_1, mkBase#1_1, mult_2, mult#1_2, mult#2_3, split_1, split#1_1, split#2_2, split#3_3, transAcc_2, transAcc#1_2, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2, transpose'_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (141) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) ---------------------------------------- (142) Obligation: Complexity Dependency Tuples Problem Rules: #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) #abs(#0) -> #0 #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) *(z0, z1) -> #mult(z0, z1) +(z0, z1) -> #add(z0, z1) attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose'(z0) -> transAcc(z0, makeBase(z0)) Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) Defined Rule Symbols: #abs_1, *_2, +_2, attach_2, attach#1_2, attach#2_3, lineMult_2, lineMult#1_2, m1_1, m2_1, m3_1, m4_1, makeBase_1, makeBase#1_1, matrixMult_2, matrixMult'_2, matrixMult'#1_2, matrixMult3_3, matrixMultList_2, matrixMultList#1_2, matrixMultOld_2, mkBase_1, mkBase#1_1, mult_2, mult#1_2, mult#2_3, split_1, split#1_1, split#2_2, split#3_3, transAcc_2, transAcc#1_2, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2, transpose'_1, #add_2, #mult_2, #natmult_2, #pred_1, #succ_1 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (143) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: #abs(#neg(z0)) -> #pos(z0) #abs(#pos(z0)) -> #pos(z0) #abs(#s(z0)) -> #pos(#s(z0)) m1(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil))), nil)) m2(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), nil)), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), nil)), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)), nil))) m3(z0) -> ::(::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), ::(::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#0))))), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), nil)))), nil)) m4(z0) -> ::(::(#abs(#pos(#s(#0))), nil), ::(::(#abs(#pos(#s(#s(#0)))), nil), ::(::(#abs(#pos(#s(#s(#s(#0))))), nil), ::(::(#abs(#pos(#s(#s(#s(#s(#0)))))), nil), nil)))) matrixMult3(z0, z1, z2) -> matrixMult(matrixMult(z0, z1), z2) matrixMultList(z0, z1) -> matrixMultList#1(z1, z0) matrixMultList#1(::(z0, z1), z2) -> matrixMultList(matrixMult(z2, z0), z1) matrixMultList#1(nil, z0) -> z0 matrixMultOld(z0, z1) -> matrixMult'(z0, transpose(z1)) transpose'(z0) -> transAcc(z0, makeBase(z0)) ---------------------------------------- (144) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (145) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (146) 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: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) The (relative) TRS S consists of the following rules: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Rewrite Strategy: INNERMOST ---------------------------------------- (147) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (148) 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: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (149) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (150) 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: *'(z0, z1) -> c28(#MULT(z0, z1)) [1] +'(z0, z1) -> c29(#ADD(z0, z1)) [1] ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) [1] ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) [1] ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) [1] LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) [1] MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) [1] MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) [1] MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) [1] MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) [1] MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) [1] MKBASE(z0) -> c76(MKBASE#1(z0)) [1] MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) [1] MULT(z0, z1) -> c79(MULT#1(z0, z1)) [1] MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) [1] SPLIT(z0) -> c85(SPLIT#1(z0)) [1] SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) [1] TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) [1] TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) [1] TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) [1] TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) [1] TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) [1] TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) [1] SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) [1] MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) [1] MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) [1] MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) [1] MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) [0] MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) [0] TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) [0] matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) [0] transAcc(z0, z1) -> transAcc#1(z0, z1) [0] makeBase(z0) -> makeBase#1(z0) [0] makeBase#1(::(z0, z1)) -> mkBase(z0) [0] makeBase#1(nil) -> nil [0] mkBase(z0) -> mkBase#1(z0) [0] mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) [0] mkBase#1(nil) -> nil [0] transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) [0] transAcc#1(nil, z0) -> z0 [0] attach(z0, z1) -> attach#1(z0, z1) [0] attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) [0] attach#1(nil, z0) -> nil [0] attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) [0] attach#2(nil, z0, z1) -> nil [0] matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) [0] matrixMult'#1(nil, z0) -> nil [0] lineMult(z0, z1) -> lineMult#1(z1, z0) [0] lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) [0] lineMult#1(nil, z0) -> nil [0] mult(z0, z1) -> mult#1(z0, z1) [0] mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) [0] mult#1(nil, z0) -> #abs(#0) [0] mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) [0] mult#2(nil, z0, z1) -> #abs(#0) [0] +(z0, z1) -> #add(z0, z1) [0] *(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] #abs(#0) -> #0 [0] split(z0) -> split#1(z0) [0] split#1(::(z0, z1)) -> split#2(z0, z1) [0] split#1(nil) -> tuple#2(nil, nil) [0] split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) [0] split#2(nil, z0) -> tuple#2(nil, nil) [0] split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) [0] transpose(z0) -> transpose#1(z0, z0) [0] transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) [0] transpose#1(nil, z0) -> nil [0] transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) [0] transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) [0] transpose#3(nil, z0) -> nil [0] Rewrite Strategy: INNERMOST ---------------------------------------- (151) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) Renamed defined symbols to avoid conflicts with arithmetic symbols: * => times + => plus ---------------------------------------- (152) 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: *'(z0, z1) -> c28(#MULT(z0, z1)) [1] +'(z0, z1) -> c29(#ADD(z0, z1)) [1] ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) [1] ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) [1] ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) [1] LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) [1] MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) [1] MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) [1] MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) [1] MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) [1] MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) [1] MKBASE(z0) -> c76(MKBASE#1(z0)) [1] MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) [1] MULT(z0, z1) -> c79(MULT#1(z0, z1)) [1] MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(times(z2, z0), mult(z3, z1)), MULT(z3, z1)) [1] SPLIT(z0) -> c85(SPLIT#1(z0)) [1] SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) [1] TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) [1] TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) [1] TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) [1] TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) [1] TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) [1] TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) [1] SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) [1] MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) [1] MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) [1] MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(times(z2, z0), mult(z3, z1))) [1] MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) [0] MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) [0] TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) [0] matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) [0] transAcc(z0, z1) -> transAcc#1(z0, z1) [0] makeBase(z0) -> makeBase#1(z0) [0] makeBase#1(::(z0, z1)) -> mkBase(z0) [0] makeBase#1(nil) -> nil [0] mkBase(z0) -> mkBase#1(z0) [0] mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) [0] mkBase#1(nil) -> nil [0] transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) [0] transAcc#1(nil, z0) -> z0 [0] attach(z0, z1) -> attach#1(z0, z1) [0] attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) [0] attach#1(nil, z0) -> nil [0] attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) [0] attach#2(nil, z0, z1) -> nil [0] matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) [0] matrixMult'#1(nil, z0) -> nil [0] lineMult(z0, z1) -> lineMult#1(z1, z0) [0] lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) [0] lineMult#1(nil, z0) -> nil [0] mult(z0, z1) -> mult#1(z0, z1) [0] mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) [0] mult#1(nil, z0) -> #abs(#0) [0] mult#2(::(z0, z1), z2, z3) -> plus(times(z2, z0), mult(z3, z1)) [0] mult#2(nil, z0, z1) -> #abs(#0) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] #abs(#0) -> #0 [0] split(z0) -> split#1(z0) [0] split#1(::(z0, z1)) -> split#2(z0, z1) [0] split#1(nil) -> tuple#2(nil, nil) [0] split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) [0] split#2(nil, z0) -> tuple#2(nil, nil) [0] split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) [0] transpose(z0) -> transpose#1(z0, z0) [0] transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) [0] transpose#1(nil, z0) -> nil [0] transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) [0] transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) [0] transpose#3(nil, z0) -> nil [0] Rewrite Strategy: INNERMOST ---------------------------------------- (153) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (154) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: *'(z0, z1) -> c28(#MULT(z0, z1)) [1] +'(z0, z1) -> c29(#ADD(z0, z1)) [1] ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) [1] ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) [1] ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) [1] LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) [1] MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) [1] MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) [1] MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) [1] MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) [1] MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) [1] MKBASE(z0) -> c76(MKBASE#1(z0)) [1] MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) [1] MULT(z0, z1) -> c79(MULT#1(z0, z1)) [1] MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(times(z2, z0), mult(z3, z1)), MULT(z3, z1)) [1] SPLIT(z0) -> c85(SPLIT#1(z0)) [1] SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) [1] TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) [1] TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) [1] TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) [1] TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) [1] TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) [1] TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) [1] SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) [1] MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) [1] MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) [1] MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(times(z2, z0), mult(z3, z1))) [1] MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) [0] MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) [0] TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) [0] matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) [0] transAcc(z0, z1) -> transAcc#1(z0, z1) [0] makeBase(z0) -> makeBase#1(z0) [0] makeBase#1(::(z0, z1)) -> mkBase(z0) [0] makeBase#1(nil) -> nil [0] mkBase(z0) -> mkBase#1(z0) [0] mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) [0] mkBase#1(nil) -> nil [0] transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) [0] transAcc#1(nil, z0) -> z0 [0] attach(z0, z1) -> attach#1(z0, z1) [0] attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) [0] attach#1(nil, z0) -> nil [0] attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) [0] attach#2(nil, z0, z1) -> nil [0] matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) [0] matrixMult'#1(nil, z0) -> nil [0] lineMult(z0, z1) -> lineMult#1(z1, z0) [0] lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) [0] lineMult#1(nil, z0) -> nil [0] mult(z0, z1) -> mult#1(z0, z1) [0] mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) [0] mult#1(nil, z0) -> #abs(#0) [0] mult#2(::(z0, z1), z2, z3) -> plus(times(z2, z0), mult(z3, z1)) [0] mult#2(nil, z0, z1) -> #abs(#0) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] #abs(#0) -> #0 [0] split(z0) -> split#1(z0) [0] split#1(::(z0, z1)) -> split#2(z0, z1) [0] split#1(nil) -> tuple#2(nil, nil) [0] split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) [0] split#2(nil, z0) -> tuple#2(nil, nil) [0] split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) [0] transpose(z0) -> transpose#1(z0, z0) [0] transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) [0] transpose#1(nil, z0) -> nil [0] transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) [0] transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) [0] transpose#3(nil, z0) -> nil [0] The TRS has the following type information: *' :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c c28 :: c9:c10:c12:c13 -> c28:c29:c63:c67:c83:c91:c #MULT :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c9:c10:c12:c13 +' :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c c29 :: c2:c4 -> c28:c29:c63:c67:c83:c91:c #ADD :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c2:c4 ATTACH :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c30 c30 :: c31 -> c30 ATTACH#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c31 :: :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil c31 :: c33 -> c31 ATTACH#2 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c33 c33 :: c30 -> c33 LINEMULT :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c35 c35 :: c36:c37 -> c35 LINEMULT#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c36:c37 c36 :: c79 -> c36:c37 MULT :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c79 c37 :: c35 -> c36:c37 MAKEBASE :: :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c c63 :: c64 -> c28:c29:c63:c67:c83:c91:c MAKEBASE#1 :: :::#neg:#pos:#s:#0:nil -> c64 c64 :: c76 -> c64 MKBASE :: :::#neg:#pos:#s:#0:nil -> c76 MATRIXMULT' :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c c67 :: c68:c69 -> c28:c29:c63:c67:c83:c91:c MATRIXMULT'#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c68:c69 c68 :: c35 -> c68:c69 c69 :: c28:c29:c63:c67:c83:c91:c -> c68:c69 MATRIXMULTLIST :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c72 c72 :: c73 -> c72 MATRIXMULTLIST#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c73 c73 :: c72 -> c28:c29:c63:c67:c83:c91:c -> c73 matrixMult :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil MATRIXMULT :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c c76 :: c77 -> c76 MKBASE#1 :: :::#neg:#pos:#s:#0:nil -> c77 c77 :: c76 -> c77 c79 :: c80 -> c79 MULT#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c80 c80 :: c28:c29:c63:c67:c83:c91:c -> c80 MULT#2 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c c83 :: c28:c29:c63:c67:c83:c91:c -> c79 -> c28:c29:c63:c67:c83:c91:c times :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil mult :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil SPLIT :: :::#neg:#pos:#s:#0:nil -> c85 c85 :: c86 -> c85 SPLIT#1 :: :::#neg:#pos:#s:#0:nil -> c86 c86 :: c88 -> c86 SPLIT#2 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c88 TRANSACC :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c c91 :: c92 -> c28:c29:c63:c67:c83:c91:c TRANSACC#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c92 c92 :: c30 -> c28:c29:c63:c67:c83:c91:c -> c92 transAcc :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil TRANSPOSE :: :::#neg:#pos:#s:#0:nil -> c94 c94 :: c95 -> c94 TRANSPOSE#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c95 c95 :: c97 -> c85 -> c95 TRANSPOSE#2 :: tuple#2 -> c97 split :: :::#neg:#pos:#s:#0:nil -> tuple#2 tuple#2 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> tuple#2 c97 :: c98 -> c97 TRANSPOSE#3 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c98 c98 :: c94 -> c98 c88 :: c85 -> c88 c :: c28:c29:c63:c67:c83:c91:c -> c28:c29:c63:c67:c83:c91:c makeBase :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil #neg :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil c9 :: c15 -> c9:c10:c12:c13 #NATMULT :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c15 #pos :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil c10 :: c15 -> c9:c10:c12:c13 c12 :: c15 -> c9:c10:c12:c13 c13 :: c15 -> c9:c10:c12:c13 #s :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil c15 :: c2:c4 -> c15 -> c15 #natmult :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil c2 :: c2:c4 -> c2:c4 c4 :: c2:c4 -> c2:c4 MATRIXMULT3 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c MATRIXMULTOLD :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c transpose :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil TRANSPOSE' :: :::#neg:#pos:#s:#0:nil -> c28:c29:c63:c67:c83:c91:c #0 :: :::#neg:#pos:#s:#0:nil #add :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil #succ :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil #pred :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil matrixMult' :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil matrixMult'#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil transAcc#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil makeBase#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil mkBase :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil nil :: :::#neg:#pos:#s:#0:nil mkBase#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil attach :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil attach#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil attach#2 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil lineMult :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil lineMult#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil mult#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil mult#2 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil #abs :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil plus :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil #mult :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil split#1 :: :::#neg:#pos:#s:#0:nil -> tuple#2 split#2 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> tuple#2 split#3 :: tuple#2 -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> tuple#2 transpose#1 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil transpose#2 :: tuple#2 -> :::#neg:#pos:#s:#0:nil transpose#3 :: :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil -> :::#neg:#pos:#s:#0:nil Rewrite Strategy: INNERMOST ---------------------------------------- (155) 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: *'_2 +'_2 ATTACH_2 ATTACH#1_2 ATTACH#2_3 LINEMULT_2 LINEMULT#1_2 MAKEBASE_1 MAKEBASE#1_1 MATRIXMULT'_2 MATRIXMULT'#1_2 MATRIXMULTLIST_2 MATRIXMULTLIST#1_2 MKBASE_1 MKBASE#1_1 MULT_2 MULT#1_2 MULT#2_3 SPLIT_1 SPLIT#1_1 TRANSACC_2 TRANSACC#1_2 TRANSPOSE_1 TRANSPOSE#1_2 TRANSPOSE#2_1 TRANSPOSE#3_2 SPLIT#2_2 MATRIXMULT_2 (c) The following functions are completely defined: #MULT_2 #NATMULT_2 #ADD_2 MATRIXMULT3_3 MATRIXMULTOLD_2 TRANSPOSE'_1 #natmult_2 #add_2 #succ_1 matrixMult_2 matrixMult'_2 transAcc_2 makeBase_1 makeBase#1_1 mkBase_1 mkBase#1_1 transAcc#1_2 attach_2 attach#1_2 attach#2_3 matrixMult'#1_2 lineMult_2 lineMult#1_2 mult_2 mult#1_2 mult#2_3 plus_2 times_2 #mult_2 #pred_1 #abs_1 split_1 split#1_1 split#2_2 split#3_3 transpose_1 transpose#1_2 transpose#2_1 transpose#3_2 Due to the following rules being added: #MULT(v0, v1) -> const1 [0] #NATMULT(v0, v1) -> const25 [0] #ADD(v0, v1) -> const2 [0] MATRIXMULT3(v0, v1, v2) -> const [0] MATRIXMULTOLD(v0, v1) -> const [0] TRANSPOSE'(v0) -> const [0] #natmult(v0, v1) -> null_#natmult [0] #add(v0, v1) -> null_#add [0] #succ(v0) -> null_#succ [0] matrixMult(v0, v1) -> null_matrixMult [0] matrixMult'(v0, v1) -> null_matrixMult' [0] transAcc(v0, v1) -> null_transAcc [0] makeBase(v0) -> null_makeBase [0] makeBase#1(v0) -> null_makeBase#1 [0] mkBase(v0) -> null_mkBase [0] mkBase#1(v0) -> null_mkBase#1 [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] attach(v0, v1) -> null_attach [0] attach#1(v0, v1) -> null_attach#1 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] lineMult(v0, v1) -> null_lineMult [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] mult(v0, v1) -> null_mult [0] mult#1(v0, v1) -> null_mult#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] plus(v0, v1) -> null_plus [0] times(v0, v1) -> null_times [0] #mult(v0, v1) -> null_#mult [0] #pred(v0) -> null_#pred [0] #abs(v0) -> null_#abs [0] split(v0) -> const23 [0] split#1(v0) -> const23 [0] split#2(v0, v1) -> const23 [0] split#3(v0, v1, v2) -> const23 [0] transpose(v0) -> null_transpose [0] transpose#1(v0, v1) -> null_transpose#1 [0] transpose#2(v0) -> null_transpose#2 [0] transpose#3(v0, v1) -> null_transpose#3 [0] And the following fresh constants: const1, const25, const2, const, null_#natmult, null_#add, null_#succ, null_matrixMult, null_matrixMult', null_transAcc, null_makeBase, null_makeBase#1, null_mkBase, null_mkBase#1, null_transAcc#1, null_attach, null_attach#1, null_attach#2, null_matrixMult'#1, null_lineMult, null_lineMult#1, null_mult, null_mult#1, null_mult#2, null_plus, null_times, null_#mult, null_#pred, null_#abs, const23, null_transpose, null_transpose#1, null_transpose#2, null_transpose#3, const3, const4, const5, const6, const7, const8, const9, const10, const11, const12, const13, const14, const15, const16, const17, const18, const19, const20, const21, const22, const24 ---------------------------------------- (156) 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: *'(z0, z1) -> c28(#MULT(z0, z1)) [1] +'(z0, z1) -> c29(#ADD(z0, z1)) [1] ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) [1] ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) [1] ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) [1] LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) [1] MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) [1] MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) [1] MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) [1] MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) [1] MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) [1] MKBASE(z0) -> c76(MKBASE#1(z0)) [1] MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) [1] MULT(z0, z1) -> c79(MULT#1(z0, z1)) [1] MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(times(z2, z0), mult(z3, z1)), MULT(z3, z1)) [1] SPLIT(z0) -> c85(SPLIT#1(z0)) [1] SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) [1] TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) [1] TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) [1] TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) [1] TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) [1] TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) [1] TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) [1] SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) [1] MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) [1] MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) [1] MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(times(z2, z0), mult(z3, z1))) [1] MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) [0] MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) [0] TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) [0] matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) [0] transAcc(z0, z1) -> transAcc#1(z0, z1) [0] makeBase(z0) -> makeBase#1(z0) [0] makeBase#1(::(z0, z1)) -> mkBase(z0) [0] makeBase#1(nil) -> nil [0] mkBase(z0) -> mkBase#1(z0) [0] mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) [0] mkBase#1(nil) -> nil [0] transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) [0] transAcc#1(nil, z0) -> z0 [0] attach(z0, z1) -> attach#1(z0, z1) [0] attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) [0] attach#1(nil, z0) -> nil [0] attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) [0] attach#2(nil, z0, z1) -> nil [0] matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) [0] matrixMult'#1(nil, z0) -> nil [0] lineMult(z0, z1) -> lineMult#1(z1, z0) [0] lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) [0] lineMult#1(nil, z0) -> nil [0] mult(z0, z1) -> mult#1(z0, z1) [0] mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) [0] mult#1(nil, z0) -> #abs(#0) [0] mult#2(::(z0, z1), z2, z3) -> plus(times(z2, z0), mult(z3, z1)) [0] mult#2(nil, z0, z1) -> #abs(#0) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] #abs(#0) -> #0 [0] split(z0) -> split#1(z0) [0] split#1(::(z0, z1)) -> split#2(z0, z1) [0] split#1(nil) -> tuple#2(nil, nil) [0] split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) [0] split#2(nil, z0) -> tuple#2(nil, nil) [0] split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) [0] transpose(z0) -> transpose#1(z0, z0) [0] transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) [0] transpose#1(nil, z0) -> nil [0] transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) [0] transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) [0] transpose#3(nil, z0) -> nil [0] #MULT(v0, v1) -> const1 [0] #NATMULT(v0, v1) -> const25 [0] #ADD(v0, v1) -> const2 [0] MATRIXMULT3(v0, v1, v2) -> const [0] MATRIXMULTOLD(v0, v1) -> const [0] TRANSPOSE'(v0) -> const [0] #natmult(v0, v1) -> null_#natmult [0] #add(v0, v1) -> null_#add [0] #succ(v0) -> null_#succ [0] matrixMult(v0, v1) -> null_matrixMult [0] matrixMult'(v0, v1) -> null_matrixMult' [0] transAcc(v0, v1) -> null_transAcc [0] makeBase(v0) -> null_makeBase [0] makeBase#1(v0) -> null_makeBase#1 [0] mkBase(v0) -> null_mkBase [0] mkBase#1(v0) -> null_mkBase#1 [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] attach(v0, v1) -> null_attach [0] attach#1(v0, v1) -> null_attach#1 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] lineMult(v0, v1) -> null_lineMult [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] mult(v0, v1) -> null_mult [0] mult#1(v0, v1) -> null_mult#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] plus(v0, v1) -> null_plus [0] times(v0, v1) -> null_times [0] #mult(v0, v1) -> null_#mult [0] #pred(v0) -> null_#pred [0] #abs(v0) -> null_#abs [0] split(v0) -> const23 [0] split#1(v0) -> const23 [0] split#2(v0, v1) -> const23 [0] split#3(v0, v1, v2) -> const23 [0] transpose(v0) -> null_transpose [0] transpose#1(v0, v1) -> null_transpose#1 [0] transpose#2(v0) -> null_transpose#2 [0] transpose#3(v0, v1) -> null_transpose#3 [0] The TRS has the following type information: *' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c28 :: c9:c10:c12:c13:const1 -> c28:c29:c63:c67:c83:c91:c:const #MULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c9:c10:c12:c13:const1 +' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c29 :: c2:c4:const2 -> c28:c29:c63:c67:c83:c91:c:const #ADD :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c2:c4:const2 ATTACH :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c30 c30 :: c31 -> c30 ATTACH#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c31 :: :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c31 :: c33 -> c31 ATTACH#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c33 c33 :: c30 -> c33 LINEMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c35 c35 :: c36:c37 -> c35 LINEMULT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c36:c37 c36 :: c79 -> c36:c37 MULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c79 c37 :: c35 -> c36:c37 MAKEBASE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c63 :: c64 -> c28:c29:c63:c67:c83:c91:c:const MAKEBASE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c64 c64 :: c76 -> c64 MKBASE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c76 MATRIXMULT' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c67 :: c68:c69 -> c28:c29:c63:c67:c83:c91:c:const MATRIXMULT'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c68:c69 c68 :: c35 -> c68:c69 c69 :: c28:c29:c63:c67:c83:c91:c:const -> c68:c69 MATRIXMULTLIST :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c72 c72 :: c73 -> c72 MATRIXMULTLIST#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c73 c73 :: c72 -> c28:c29:c63:c67:c83:c91:c:const -> c73 matrixMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 MATRIXMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c76 :: c77 -> c76 MKBASE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c77 c77 :: c76 -> c77 c79 :: c80 -> c79 MULT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c80 c80 :: c28:c29:c63:c67:c83:c91:c:const -> c80 MULT#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c83 :: c28:c29:c63:c67:c83:c91:c:const -> c79 -> c28:c29:c63:c67:c83:c91:c:const times :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 SPLIT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c85 c85 :: c86 -> c85 SPLIT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c86 c86 :: c88 -> c86 SPLIT#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c88 TRANSACC :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c91 :: c92 -> c28:c29:c63:c67:c83:c91:c:const TRANSACC#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c92 c92 :: c30 -> c28:c29:c63:c67:c83:c91:c:const -> c92 transAcc :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 TRANSPOSE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c94 c94 :: c95 -> c94 TRANSPOSE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c95 c95 :: c97 -> c85 -> c95 TRANSPOSE#2 :: tuple#2:const23 -> c97 split :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 tuple#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 c97 :: c98 -> c97 TRANSPOSE#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c98 c98 :: c94 -> c98 c88 :: c85 -> c88 c :: c28:c29:c63:c67:c83:c91:c:const -> c28:c29:c63:c67:c83:c91:c:const makeBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #neg :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c9 :: c15:const25 -> c9:c10:c12:c13:const1 #NATMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c15:const25 #pos :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c10 :: c15:const25 -> c9:c10:c12:c13:const1 c12 :: c15:const25 -> c9:c10:c12:c13:const1 c13 :: c15:const25 -> c9:c10:c12:c13:const1 #s :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c15 :: c2:c4:const2 -> c15:const25 -> c15:const25 #natmult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c2 :: c2:c4:const2 -> c2:c4:const2 c4 :: c2:c4:const2 -> c2:c4:const2 MATRIXMULT3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const MATRIXMULTOLD :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const transpose :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 TRANSPOSE' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const #0 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #add :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #succ :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #pred :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transAcc#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 makeBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mkBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 nil :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mkBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 lineMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 lineMult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #abs :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 plus :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 split#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 split#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 split#3 :: tuple#2:const23 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 transpose#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transpose#2 :: tuple#2:const23 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transpose#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 const1 :: c9:c10:c12:c13:const1 const25 :: c15:const25 const2 :: c2:c4:const2 const :: c28:c29:c63:c67:c83:c91:c:const null_#natmult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#add :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#succ :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transAcc :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_makeBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_makeBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mkBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mkBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transAcc#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_lineMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_lineMult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_plus :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_times :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#pred :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#abs :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 const23 :: tuple#2:const23 null_transpose :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 const3 :: c30 const4 :: c31 const5 :: c33 const6 :: c35 const7 :: c36:c37 const8 :: c79 const9 :: c64 const10 :: c76 const11 :: c68:c69 const12 :: c72 const13 :: c73 const14 :: c77 const15 :: c80 const16 :: c85 const17 :: c86 const18 :: c88 const19 :: c92 const20 :: c94 const21 :: c95 const22 :: c97 const24 :: c98 Rewrite Strategy: INNERMOST ---------------------------------------- (157) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (158) 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: *'(z0, z1) -> c28(#MULT(z0, z1)) [1] +'(z0, z1) -> c29(#ADD(z0, z1)) [1] ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) [1] ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) [1] ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) [1] LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) [1] MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) [1] MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) [1] MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) [1] MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) [1] MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult'(z2, transAcc(z0, makeBase(z0))), z1), MATRIXMULT(z2, z0)) [1] MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(null_matrixMult, z1), MATRIXMULT(z2, z0)) [1] MKBASE(z0) -> c76(MKBASE#1(z0)) [1] MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) [1] MULT(z0, z1) -> c79(MULT#1(z0, z1)) [1] MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(#mult(z2, z0), mult#1(z3, z1)), MULT(z3, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(#mult(z2, z0), null_mult), MULT(z3, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(null_times, mult#1(z3, z1)), MULT(z3, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(null_times, null_mult), MULT(z3, z1)) [1] SPLIT(z0) -> c85(SPLIT#1(z0)) [1] SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) [1] TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) [1] TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc#1(z1, z2)), TRANSACC(z1, z2)) [1] TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, null_transAcc), TRANSACC(z1, z2)) [1] TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) [1] TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split#1(z2)), SPLIT(z2)) [1] TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(const23), SPLIT(z2)) [1] TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) [1] TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) [1] SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) [1] MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase#1(z1)))) [1] MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, null_makeBase))) [1] MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase#1(z1))) [1] MATRIXMULT(z0, z1) -> c(TRANSACC(z1, null_makeBase)) [1] MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(#mult(z2, z0), mult#1(z3, z1))) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(#mult(z2, z0), null_mult)) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(null_times, mult#1(z3, z1))) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(null_times, null_mult)) [1] MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(#0), z1) -> c15(#ADD(#pos(z1), #0), #NATMULT(#0, z1)) [0] #NATMULT(#s(#s(z0')), z1) -> c15(#ADD(#pos(z1), #add(#pos(z1), #natmult(z0', z1))), #NATMULT(#s(z0'), z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), null_#natmult), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), z2)) [0] MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(null_matrixMult, z2)) [0] MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose#1(z1, z1))) [0] MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, null_transpose)) [0] TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) [0] TRANSPOSE'(z0) -> c(TRANSACC(z0, null_makeBase)) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(#0), z1) -> #add(#pos(z1), #0) [0] #natmult(#s(#s(z0'')), z1) -> #add(#pos(z1), #add(#pos(z1), #natmult(z0'', z1))) [0] #natmult(#s(z0), z1) -> #add(#pos(z1), null_#natmult) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(#0))), z1) -> #succ(#succ(z1)) [0] #add(#pos(#s(#s(#s(z01)))), z1) -> #succ(#succ(#add(#pos(#s(z01)), z1))) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(null_#add) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(#0))), z1) -> #pred(#succ(z1)) [0] #add(#neg(#s(#s(#s(z02)))), z1) -> #pred(#succ(#add(#pos(#s(z02)), z1))) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(null_#add) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase#1(z1))) [0] matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, null_makeBase)) [0] matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) [0] transAcc(z0, z1) -> transAcc#1(z0, z1) [0] makeBase(z0) -> makeBase#1(z0) [0] makeBase#1(::(z0, z1)) -> mkBase(z0) [0] makeBase#1(nil) -> nil [0] mkBase(z0) -> mkBase#1(z0) [0] mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) [0] mkBase#1(nil) -> nil [0] transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc#1(z1, z2)) [0] transAcc#1(::(z0, z1), z2) -> attach(z0, null_transAcc) [0] transAcc#1(nil, z0) -> z0 [0] attach(z0, z1) -> attach#1(z0, z1) [0] attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) [0] attach#1(nil, z0) -> nil [0] attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) [0] attach#2(nil, z0, z1) -> nil [0] matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) [0] matrixMult'#1(nil, z0) -> nil [0] lineMult(z0, z1) -> lineMult#1(z1, z0) [0] lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) [0] lineMult#1(nil, z0) -> nil [0] mult(z0, z1) -> mult#1(z0, z1) [0] mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) [0] mult#1(nil, z0) -> #abs(#0) [0] mult#2(::(z0, z1), z2, z3) -> plus(#mult(z2, z0), mult#1(z3, z1)) [0] mult#2(::(z0, z1), z2, z3) -> plus(#mult(z2, z0), null_mult) [0] mult#2(::(z0, z1), z2, z3) -> plus(null_times, mult#1(z3, z1)) [0] mult#2(::(z0, z1), z2, z3) -> plus(null_times, null_mult) [0] mult#2(nil, z0, z1) -> #abs(#0) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] #abs(#0) -> #0 [0] split(z0) -> split#1(z0) [0] split#1(::(z0, z1)) -> split#2(z0, z1) [0] split#1(nil) -> tuple#2(nil, nil) [0] split#2(::(z0, z1), z2) -> split#3(split#1(z2), z0, z1) [0] split#2(::(z0, z1), z2) -> split#3(const23, z0, z1) [0] split#2(nil, z0) -> tuple#2(nil, nil) [0] split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) [0] transpose(z0) -> transpose#1(z0, z0) [0] transpose#1(::(z0, z1), z2) -> transpose#2(split#1(z2)) [0] transpose#1(::(z0, z1), z2) -> transpose#2(const23) [0] transpose#1(nil, z0) -> nil [0] transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) [0] transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) [0] transpose#3(nil, z0) -> nil [0] #MULT(v0, v1) -> const1 [0] #NATMULT(v0, v1) -> const25 [0] #ADD(v0, v1) -> const2 [0] MATRIXMULT3(v0, v1, v2) -> const [0] MATRIXMULTOLD(v0, v1) -> const [0] TRANSPOSE'(v0) -> const [0] #natmult(v0, v1) -> null_#natmult [0] #add(v0, v1) -> null_#add [0] #succ(v0) -> null_#succ [0] matrixMult(v0, v1) -> null_matrixMult [0] matrixMult'(v0, v1) -> null_matrixMult' [0] transAcc(v0, v1) -> null_transAcc [0] makeBase(v0) -> null_makeBase [0] makeBase#1(v0) -> null_makeBase#1 [0] mkBase(v0) -> null_mkBase [0] mkBase#1(v0) -> null_mkBase#1 [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] attach(v0, v1) -> null_attach [0] attach#1(v0, v1) -> null_attach#1 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] lineMult(v0, v1) -> null_lineMult [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] mult(v0, v1) -> null_mult [0] mult#1(v0, v1) -> null_mult#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] plus(v0, v1) -> null_plus [0] times(v0, v1) -> null_times [0] #mult(v0, v1) -> null_#mult [0] #pred(v0) -> null_#pred [0] #abs(v0) -> null_#abs [0] split(v0) -> const23 [0] split#1(v0) -> const23 [0] split#2(v0, v1) -> const23 [0] split#3(v0, v1, v2) -> const23 [0] transpose(v0) -> null_transpose [0] transpose#1(v0, v1) -> null_transpose#1 [0] transpose#2(v0) -> null_transpose#2 [0] transpose#3(v0, v1) -> null_transpose#3 [0] The TRS has the following type information: *' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c28 :: c9:c10:c12:c13:const1 -> c28:c29:c63:c67:c83:c91:c:const #MULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c9:c10:c12:c13:const1 +' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c29 :: c2:c4:const2 -> c28:c29:c63:c67:c83:c91:c:const #ADD :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c2:c4:const2 ATTACH :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c30 c30 :: c31 -> c30 ATTACH#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c31 :: :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c31 :: c33 -> c31 ATTACH#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c33 c33 :: c30 -> c33 LINEMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c35 c35 :: c36:c37 -> c35 LINEMULT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c36:c37 c36 :: c79 -> c36:c37 MULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c79 c37 :: c35 -> c36:c37 MAKEBASE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c63 :: c64 -> c28:c29:c63:c67:c83:c91:c:const MAKEBASE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c64 c64 :: c76 -> c64 MKBASE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c76 MATRIXMULT' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c67 :: c68:c69 -> c28:c29:c63:c67:c83:c91:c:const MATRIXMULT'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c68:c69 c68 :: c35 -> c68:c69 c69 :: c28:c29:c63:c67:c83:c91:c:const -> c68:c69 MATRIXMULTLIST :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c72 c72 :: c73 -> c72 MATRIXMULTLIST#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c73 c73 :: c72 -> c28:c29:c63:c67:c83:c91:c:const -> c73 matrixMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 MATRIXMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c76 :: c77 -> c76 MKBASE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c77 c77 :: c76 -> c77 c79 :: c80 -> c79 MULT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c80 c80 :: c28:c29:c63:c67:c83:c91:c:const -> c80 MULT#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c83 :: c28:c29:c63:c67:c83:c91:c:const -> c79 -> c28:c29:c63:c67:c83:c91:c:const times :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 SPLIT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c85 c85 :: c86 -> c85 SPLIT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c86 c86 :: c88 -> c86 SPLIT#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c88 TRANSACC :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const c91 :: c92 -> c28:c29:c63:c67:c83:c91:c:const TRANSACC#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c92 c92 :: c30 -> c28:c29:c63:c67:c83:c91:c:const -> c92 transAcc :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 TRANSPOSE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c94 c94 :: c95 -> c94 TRANSPOSE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c95 c95 :: c97 -> c85 -> c95 TRANSPOSE#2 :: tuple#2:const23 -> c97 split :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 tuple#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 c97 :: c98 -> c97 TRANSPOSE#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c98 c98 :: c94 -> c98 c88 :: c85 -> c88 c :: c28:c29:c63:c67:c83:c91:c:const -> c28:c29:c63:c67:c83:c91:c:const makeBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #neg :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c9 :: c15:const25 -> c9:c10:c12:c13:const1 #NATMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c15:const25 #pos :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c10 :: c15:const25 -> c9:c10:c12:c13:const1 c12 :: c15:const25 -> c9:c10:c12:c13:const1 c13 :: c15:const25 -> c9:c10:c12:c13:const1 #s :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c15 :: c2:c4:const2 -> c15:const25 -> c15:const25 #natmult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c2 :: c2:c4:const2 -> c2:c4:const2 c4 :: c2:c4:const2 -> c2:c4:const2 MATRIXMULT3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const MATRIXMULTOLD :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const transpose :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 TRANSPOSE' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:const #0 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #add :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #succ :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #pred :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transAcc#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 makeBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mkBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 nil :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mkBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 lineMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 lineMult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #abs :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 plus :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 split#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 split#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 split#3 :: tuple#2:const23 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:const23 transpose#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transpose#2 :: tuple#2:const23 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transpose#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 const1 :: c9:c10:c12:c13:const1 const25 :: c15:const25 const2 :: c2:c4:const2 const :: c28:c29:c63:c67:c83:c91:c:const null_#natmult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#add :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#succ :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transAcc :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_makeBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_makeBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mkBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mkBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transAcc#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_lineMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_lineMult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_plus :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_times :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#pred :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#abs :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 const23 :: tuple#2:const23 null_transpose :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 const3 :: c30 const4 :: c31 const5 :: c33 const6 :: c35 const7 :: c36:c37 const8 :: c79 const9 :: c64 const10 :: c76 const11 :: c68:c69 const12 :: c72 const13 :: c73 const14 :: c77 const15 :: c80 const16 :: c85 const17 :: c86 const18 :: c88 const19 :: c92 const20 :: c94 const21 :: c95 const22 :: c97 const24 :: c98 Rewrite Strategy: INNERMOST ---------------------------------------- (159) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: #0 => 0 nil => 1 const1 => 0 const25 => 0 const2 => 0 const => 0 null_#natmult => 0 null_#add => 0 null_#succ => 0 null_matrixMult => 0 null_matrixMult' => 0 null_transAcc => 0 null_makeBase => 0 null_makeBase#1 => 0 null_mkBase => 0 null_mkBase#1 => 0 null_transAcc#1 => 0 null_attach => 0 null_attach#1 => 0 null_attach#2 => 0 null_matrixMult'#1 => 0 null_lineMult => 0 null_lineMult#1 => 0 null_mult => 0 null_mult#1 => 0 null_mult#2 => 0 null_plus => 0 null_times => 0 null_#mult => 0 null_#pred => 0 null_#abs => 0 const23 => 0 null_transpose => 0 null_transpose#1 => 0 null_transpose#2 => 0 null_transpose#3 => 0 const3 => 0 const4 => 0 const5 => 0 const6 => 0 const7 => 0 const8 => 0 const9 => 0 const10 => 0 const11 => 0 const12 => 0 const13 => 0 const14 => 0 const15 => 0 const16 => 0 const17 => 0 const18 => 0 const19 => 0 const20 => 0 const21 => 0 const22 => 0 const24 => 0 ---------------------------------------- (160) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + z0), z1) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #MULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #NATMULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, 0) + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, 0) + #NATMULT(0, z1) :|: z1 >= 0, z = 1 + 0, z' = z1 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, #add(1 + z1, #natmult(z0', z1))) + #NATMULT(1 + z0', z1) :|: z1 >= 0, z = 1 + (1 + z0'), z0' >= 0, z' = z1 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #add(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> #succ(z0) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0 #add(z, z') -{ 0 }-> #succ(0) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #add(z, z') -{ 0 }-> #succ(#succ(z1)) :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)) #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + z01), z1))) :|: z1 >= 0, z01 >= 0, z = 1 + (1 + (1 + (1 + z01))), z' = z1 #add(z, z') -{ 0 }-> #pred(z0) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0 #add(z, z') -{ 0 }-> #pred(0) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #add(z, z') -{ 0 }-> #pred(#succ(z1)) :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)) #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + z02), z1))) :|: z1 >= 0, z02 >= 0, z' = z1, z = 1 + (1 + (1 + (1 + z02))) #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z' = 1 + z0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 1 + z0, z0 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #natmult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + z1, 0) :|: z1 >= 0, z = 1 + 0, z' = z1 #natmult(z, z') -{ 0 }-> #add(1 + z1, 0) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z1, #add(1 + z1, #natmult(z0'', z1))) :|: z1 >= 0, z = 1 + (1 + z0''), z' = z1, z0'' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) *'(z, z') -{ 1 }-> 1 + #MULT(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z2, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z0) :|: z = z0, z0 >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z1, makeBase#1(z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z1, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z0, transAcc(z1, makeBase#1(z1))) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z0, transAcc(z1, 0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), z2) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z2) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z2, transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z0, transpose#1(z1, z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z0, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z0) :|: z = z0, z0 >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z3, z1)) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), mult#1(z3, z1)) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), 0) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z0) :|: z = z0, z0 >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z2)) + TRANSACC(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z0, z0) :|: z = z0, z0 >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z2)) + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z0, makeBase#1(z0)) :|: z = z0, z0 >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z0, 0) :|: z = z0, z0 >= 0 attach(z, z') -{ 0 }-> attach#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 attach(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#1(z, z') -{ 0 }-> attach#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 attach#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#2(z, z', z'') -{ 0 }-> 1 :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 attach#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z2 + z0) + attach(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 lineMult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 lineMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 0 }-> 1 + mult(z2, z0) + lineMult(z2, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 makeBase(z) -{ 0 }-> makeBase#1(z0) :|: z = z0, z0 >= 0 makeBase(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 matrixMult(z, z') -{ 0 }-> matrixMult'(z0, transAcc(z1, makeBase#1(z1))) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z0, transAcc(z1, 0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z2) + matrixMult'(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 mkBase(z) -{ 0 }-> mkBase#1(z0) :|: z = z0, z0 >= 0 mkBase(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 0 }-> mult#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 0 }-> #abs(0) :|: z = 1, z0 >= 0, z' = z0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z2, z0), mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z2, z0), 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult#2(z, z', z'') -{ 0 }-> #abs(0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> #add(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 split(z) -{ 0 }-> split#1(z0) :|: z = z0, z0 >= 0 split(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z2), z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 split#2(z, z') -{ 0 }-> split#3(0, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 split#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z0 >= 0, z' = z0 split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z2 + z0) + (1 + z3 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 times(z, z') -{ 0 }-> #mult(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 transAcc(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transAcc#1(z, z') -{ 0 }-> z0 :|: z = 1, z0 >= 0, z' = z0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose(z) -{ 0 }-> transpose#1(z0, z0) :|: z = z0, z0 >= 0 transpose(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 transpose#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 transpose#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#3(z, z') -{ 0 }-> 1 + z2 + transpose(1 + z0 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 ---------------------------------------- (161) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) #succ(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z2 + z0) + (1 + z3 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 ---------------------------------------- (162) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + z0), z1) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #MULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #NATMULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, 0) + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, 0) + #NATMULT(0, z1) :|: z1 >= 0, z = 1 + 0, z' = z1 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, #add(1 + z1, #natmult(z0', z1))) + #NATMULT(1 + z0', z1) :|: z1 >= 0, z = 1 + (1 + z0'), z0' >= 0, z' = z1 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #add(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z0 >= 0, z' = z0, v0 >= 0, z0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z0 >= 0, z' = z0, z0 = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), v0 >= 0, z1 = v0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z0 >= 0, z1 = 1 + (1 + z0), v0 >= 0, 1 + (1 + (1 + z0)) = v0 #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z0 >= 0, z1 = 1 + (1 + (1 + z0)), v0 >= 0, 1 + (1 + z0) = v0 #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z0 >= 0, z1 = 1 + (1 + (1 + z0)), 1 + (1 + z0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z1 = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z1 = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z1 = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z = 1 + (1 + 0), z0 >= 0, z' = z0, z0' >= 0, z0 = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z0 >= 0, z1 = 1 + (1 + z0), z0' >= 0, 1 + (1 + (1 + z0)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z0 >= 0, z1 = 1 + (1 + (1 + z0)), z0' >= 0, 1 + (1 + z0) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0, z0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), v0 >= 0, z1 = v0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z1 = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z1 = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0, z0' >= 0, z0 = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z0 >= 0, z1 = 1 + (1 + z0), z0' >= 0, 1 + (1 + (1 + z0)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z1 >= 0, z' = z1, z = 1 + (1 + (1 + 0)), z0 >= 0, z1 = 1 + (1 + (1 + z0)), z0' >= 0, 1 + (1 + z0) = 1 + (1 + z0') #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + z01), z1))) :|: z1 >= 0, z01 >= 0, z = 1 + (1 + (1 + (1 + z01))), z' = z1 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + z02), z1))) :|: z1 >= 0, z02 >= 0, z' = z1, z = 1 + (1 + (1 + (1 + z02))) #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z' = 1 + z0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 1 + z0, z0 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #natmult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + z1, 0) :|: z1 >= 0, z = 1 + 0, z' = z1 #natmult(z, z') -{ 0 }-> #add(1 + z1, 0) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z1, #add(1 + z1, #natmult(z0'', z1))) :|: z1 >= 0, z = 1 + (1 + z0''), z' = z1, z0'' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) *'(z, z') -{ 1 }-> 1 + #MULT(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z2, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z0) :|: z = z0, z0 >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z1, makeBase#1(z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z1, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z0, transAcc(z1, makeBase#1(z1))) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z0, transAcc(z1, 0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), z2) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z2) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z2, transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z0, transpose#1(z1, z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z0, 0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z0) :|: z = z0, z0 >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z3, z1)) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), mult#1(z3, z1)) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z2, z0), 0) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z0) :|: z = z0, z0 >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z2)) + TRANSACC(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z0, z0) :|: z = z0, z0 >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z2)) + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z0, makeBase#1(z0)) :|: z = z0, z0 >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z0, 0) :|: z = z0, z0 >= 0 attach(z, z') -{ 0 }-> attach#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 attach(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#1(z, z') -{ 0 }-> attach#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 attach#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#2(z, z', z'') -{ 0 }-> 1 :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 attach#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z2 + z0) + attach(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 lineMult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 lineMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 0 }-> 1 + mult(z2, z0) + lineMult(z2, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 makeBase(z) -{ 0 }-> makeBase#1(z0) :|: z = z0, z0 >= 0 makeBase(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 matrixMult(z, z') -{ 0 }-> matrixMult'(z0, transAcc(z1, makeBase#1(z1))) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z0, transAcc(z1, 0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z2) + matrixMult'(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 mkBase(z) -{ 0 }-> mkBase#1(z0) :|: z = z0, z0 >= 0 mkBase(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 0 }-> mult#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z0 >= 0, z' = z0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z0 >= 0, z' = z0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z2, z0), mult#1(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z2, z0), 0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> #add(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 split(z) -{ 0 }-> split#1(z0) :|: z = z0, z0 >= 0 split(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z2), z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 split#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z0 >= 0, z' = z0 split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z2 + z0) + (1 + z3 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 times(z, z') -{ 0 }-> #mult(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 transAcc(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transAcc#1(z, z') -{ 0 }-> z0 :|: z = 1, z0 >= 0, z' = z0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose(z) -{ 0 }-> transpose#1(z0, z0) :|: z = z0, z0 >= 0 transpose(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 transpose#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 transpose#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#3(z, z') -{ 0 }-> 1 + z2 + transpose(1 + z0 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 ---------------------------------------- (163) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (164) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ---------------------------------------- (165) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { split#3 } { #pred } { ATTACH#1, ATTACH#2, ATTACH } { #ADD } { attach#2, attach, attach#1 } { SPLIT#1, SPLIT, SPLIT#2 } { MKBASE#1, MKBASE } { #abs } { #succ } { mkBase, mkBase#1 } { split#2, split#1 } { #add } { +' } { transAcc#1 } { MAKEBASE#1 } { makeBase#1 } { transpose#3, transpose#2, transpose#1, transpose } { split } { TRANSPOSE#2, TRANSPOSE#3, TRANSPOSE#1, TRANSPOSE } { plus } { #natmult } { transAcc } { TRANSACC#1, TRANSACC } { MAKEBASE } { makeBase } { #mult } { #NATMULT } { TRANSPOSE' } { times } { mult#1, mult#2 } { #MULT } { mult } { *' } { lineMult, lineMult#1 } { MULT, MULT#1, MULT#2 } { matrixMult', matrixMult'#1 } { LINEMULT, LINEMULT#1 } { matrixMult } { MATRIXMULT'#1, MATRIXMULT' } { MATRIXMULTOLD } { MATRIXMULT } { MATRIXMULT3 } { MATRIXMULTLIST#1, MATRIXMULTLIST } ---------------------------------------- (166) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split#3}, {#pred}, {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} ---------------------------------------- (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: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split#3}, {#pred}, {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} ---------------------------------------- (169) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: split#3 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z + z' + z'' ---------------------------------------- (170) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split#3}, {#pred}, {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: ?, size: O(n^1) [2 + z + z' + z''] ---------------------------------------- (171) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: split#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (172) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#pred}, {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] ---------------------------------------- (173) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (174) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#pred}, {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] ---------------------------------------- (175) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (176) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#pred}, {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (177) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (178) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (179) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (180) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (181) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: ATTACH#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: ATTACH#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 Computed SIZE bound using CoFloCo for: ATTACH after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (182) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {ATTACH#1,ATTACH#2,ATTACH}, {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: ?, size: O(1) [0] ATTACH#2: runtime: ?, size: O(1) [2] ATTACH: runtime: ?, size: O(1) [1] ---------------------------------------- (183) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: ATTACH#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 5 + 3*z' Computed RUNTIME bound using CoFloCo for: ATTACH#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + 3*z Computed RUNTIME bound using CoFloCo for: ATTACH after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 6 + 3*z' ---------------------------------------- (184) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z, z') :|: z' >= 0, z >= 0 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, 0) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] ---------------------------------------- (185) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (186) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] ---------------------------------------- (187) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #ADD after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (188) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#ADD}, {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: ?, size: O(n^1) [z] ---------------------------------------- (189) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #ADD after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (190) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + (z - 3)), z') :|: z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(0, z') :|: z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', 0) + #NATMULT(z - 1, z') :|: z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z, z') :|: z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (191) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (192) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (193) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: attach#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z + z' + z'' Computed SIZE bound using CoFloCo for: attach after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' Computed SIZE bound using CoFloCo for: attach#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z + z' ---------------------------------------- (194) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {attach#2,attach,attach#1}, {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: ?, size: O(n^1) [2 + z + z' + z''] attach: runtime: ?, size: O(n^1) [1 + z + z'] attach#1: runtime: ?, size: O(n^1) [1 + z + z'] ---------------------------------------- (195) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: attach#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: attach after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: attach#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (196) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> attach#1(z, z') :|: z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> attach#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + attach(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] ---------------------------------------- (197) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (198) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] ---------------------------------------- (199) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: SPLIT#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: SPLIT after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 Computed SIZE bound using CoFloCo for: SPLIT#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (200) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {SPLIT#1,SPLIT,SPLIT#2}, {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: ?, size: O(1) [0] SPLIT: runtime: ?, size: O(1) [1] SPLIT#2: runtime: ?, size: O(1) [2] ---------------------------------------- (201) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: SPLIT#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 9*z Computed RUNTIME bound using CoFloCo for: SPLIT after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + 9*z Computed RUNTIME bound using CoFloCo for: SPLIT#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + 9*z' ---------------------------------------- (202) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z) :|: z >= 0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split#1(z')) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(0) + SPLIT(z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] ---------------------------------------- (203) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (204) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] ---------------------------------------- (205) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: MKBASE#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: MKBASE after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (206) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {MKBASE#1,MKBASE}, {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: ?, size: O(1) [0] MKBASE: runtime: ?, size: O(1) [1] ---------------------------------------- (207) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: MKBASE#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4*z Computed RUNTIME bound using CoFloCo for: MKBASE after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + 4*z ---------------------------------------- (208) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z) :|: z >= 0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] ---------------------------------------- (209) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (210) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] ---------------------------------------- (211) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #abs after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (212) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#abs}, {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: ?, size: O(1) [0] ---------------------------------------- (213) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #abs after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (214) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] ---------------------------------------- (215) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (216) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] ---------------------------------------- (217) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (218) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#succ}, {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (219) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (220) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (221) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (222) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (223) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: mkBase after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z Computed SIZE bound using KoAT for: mkBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z ---------------------------------------- (224) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {mkBase,mkBase#1}, {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: ?, size: O(n^1) [2*z] mkBase#1: runtime: ?, size: O(n^1) [2*z] ---------------------------------------- (225) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: mkBase after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: mkBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (226) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> mkBase#1(z) :|: z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] ---------------------------------------- (227) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (228) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] ---------------------------------------- (229) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: split#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + z + z' Computed SIZE bound using CoFloCo for: split#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z ---------------------------------------- (230) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split#2,split#1}, {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: ?, size: O(n^1) [4 + z + z'] split#1: runtime: ?, size: O(n^1) [3 + z] ---------------------------------------- (231) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: split#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: split#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (232) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(split#1(z')) + s12 :|: s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> split#1(z) :|: z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split#1(z'), z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(split#1(z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] ---------------------------------------- (233) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (234) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] ---------------------------------------- (235) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #add after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (236) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {#add}, {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (237) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #add after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (238) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 plus(z, z') -{ 0 }-> #add(z, z') :|: z' >= 0, z >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (239) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (240) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (241) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: +' after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (242) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {+'}, {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: ?, size: O(n^1) [1 + z] ---------------------------------------- (243) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: +' after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (244) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (245) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (246) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] ---------------------------------------- (247) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: transAcc#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (248) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {transAcc#1}, {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (249) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: transAcc#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (250) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc#1(z1, z')) + TRANSACC(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc#1(z1, z')) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (251) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (252) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (253) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: MAKEBASE#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (254) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {MAKEBASE#1}, {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: ?, size: O(1) [2] ---------------------------------------- (255) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: MAKEBASE#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + 4*z ---------------------------------------- (256) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z) :|: z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] ---------------------------------------- (257) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (258) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] ---------------------------------------- (259) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: makeBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z ---------------------------------------- (260) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {makeBase#1}, {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: ?, size: O(n^1) [2*z] ---------------------------------------- (261) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: makeBase#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (262) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', makeBase#1(z')) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, makeBase#1(z)) :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> makeBase#1(z) :|: z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', makeBase#1(z'))) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] ---------------------------------------- (263) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (264) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] ---------------------------------------- (265) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: transpose#3 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: transpose#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: transpose#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: transpose after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (266) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {transpose#3,transpose#2,transpose#1,transpose}, {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: ?, size: INF transpose#2: runtime: ?, size: INF transpose#1: runtime: ?, size: INF transpose: runtime: ?, size: INF ---------------------------------------- (267) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: transpose#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: transpose#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: transpose#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: transpose after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (268) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, transpose#1(z', z')) :|: z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> transpose#1(z, z) :|: z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(s24) :|: s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> transpose#2(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + transpose(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: O(1) [0], size: INF transpose#2: runtime: O(1) [0], size: INF transpose#1: runtime: O(1) [0], size: INF transpose: runtime: O(1) [0], size: INF ---------------------------------------- (269) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (270) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, s49) :|: s49 >= 0, s49 <= inf, z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> s50 :|: s50 >= 0, s50 <= inf', z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= inf'', s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= inf1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> s53 :|: s53 >= 0, s53 <= inf2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + s54 :|: s54 >= 0, s54 <= inf3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: O(1) [0], size: INF transpose#2: runtime: O(1) [0], size: INF transpose#1: runtime: O(1) [0], size: INF transpose: runtime: O(1) [0], size: INF ---------------------------------------- (271) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: split after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 3 + z ---------------------------------------- (272) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, s49) :|: s49 >= 0, s49 <= inf, z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> s50 :|: s50 >= 0, s50 <= inf', z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= inf'', s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= inf1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> s53 :|: s53 >= 0, s53 <= inf2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + s54 :|: s54 >= 0, s54 <= inf3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {split}, {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: O(1) [0], size: INF transpose#2: runtime: O(1) [0], size: INF transpose#1: runtime: O(1) [0], size: INF transpose: runtime: O(1) [0], size: INF split: runtime: ?, size: O(n^1) [3 + z] ---------------------------------------- (273) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: split after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (274) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, s49) :|: s49 >= 0, s49 <= inf, z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> s50 :|: s50 >= 0, s50 <= inf', z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= inf'', s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= inf1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> s53 :|: s53 >= 0, s53 <= inf2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + s54 :|: s54 >= 0, s54 <= inf3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: O(1) [0], size: INF transpose#2: runtime: O(1) [0], size: INF transpose#1: runtime: O(1) [0], size: INF transpose: runtime: O(1) [0], size: INF split: runtime: O(1) [0], size: O(n^1) [3 + z] ---------------------------------------- (275) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (276) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, s49) :|: s49 >= 0, s49 <= inf, z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> s50 :|: s50 >= 0, s50 <= inf', z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= inf'', s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= inf1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> s53 :|: s53 >= 0, s53 <= inf2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + s54 :|: s54 >= 0, s54 <= inf3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: O(1) [0], size: INF transpose#2: runtime: O(1) [0], size: INF transpose#1: runtime: O(1) [0], size: INF transpose: runtime: O(1) [0], size: INF split: runtime: O(1) [0], size: O(n^1) [3 + z] ---------------------------------------- (277) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: TRANSPOSE#2 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed SIZE bound using CoFloCo for: TRANSPOSE#3 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 4 Computed SIZE bound using CoFloCo for: TRANSPOSE#1 after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 Computed SIZE bound using CoFloCo for: TRANSPOSE after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 3 ---------------------------------------- (278) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, s49) :|: s49 >= 0, s49 <= inf, z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> s50 :|: s50 >= 0, s50 <= inf', z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= inf'', s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= inf1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> s53 :|: s53 >= 0, s53 <= inf2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + s54 :|: s54 >= 0, s54 <= inf3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: O(1) [0], size: INF transpose#2: runtime: O(1) [0], size: INF transpose#1: runtime: O(1) [0], size: INF transpose: runtime: O(1) [0], size: INF split: runtime: O(1) [0], size: O(n^1) [3 + z] TRANSPOSE#2: runtime: ?, size: O(1) [0] TRANSPOSE#3: runtime: ?, size: O(1) [4] TRANSPOSE#1: runtime: ?, size: O(1) [2] TRANSPOSE: runtime: ?, size: O(1) [3] ---------------------------------------- (279) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: TRANSPOSE#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (280) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #ADD(z, z') -{ 0 }-> 1 + s5 :|: s5 >= 0, s5 <= 1 + (1 + (z - 3)), z' >= 0, z - 3 >= 0 #MULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #NATMULT(z, z') -{ 0 }-> 1 + s3 + #NATMULT(0, z') :|: s3 >= 0, s3 <= 1 + z', z' >= 0, z = 1 + 0 #NATMULT(z, z') -{ 0 }-> 1 + s4 + #NATMULT(z - 1, z') :|: s4 >= 0, s4 <= 1 + z', z' >= 0, z - 1 >= 0 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z', #add(1 + z', #natmult(z - 2, z'))) + #NATMULT(1 + (z - 2), z') :|: z' >= 0, z - 2 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: z >= 0 #add(z, z') -{ 0 }-> s32 :|: s30 >= 0, s30 <= 2 * (1 + (1 + (z - 4))) + z', s31 >= 0, s31 <= s30 + 2, s32 >= 0, s32 <= s31 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s35 :|: s33 >= 0, s33 <= 2 * (1 + (1 + (z - 4))) + z', s34 >= 0, s34 <= s33 + 2, s35 >= 0, s35 <= s34 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' >= 0, z - 3 >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + z0') :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + z0')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' >= 0, z - 3 >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0)) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' = 0, z0 >= 0, 1 + (1 + 0) = 1 + (1 + z0) #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 2 >= 0, z0' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + z0')) :|: z' >= 0, z = 1 + (1 + (1 + 0)), z' - 3 >= 0, z0' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + z0') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z' - 1 >= 0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z' - 1 >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> s27 :|: s27 >= 0, s27 <= 2 * (1 + z') + 0, z' >= 0, z = 1 + 0 #natmult(z, z') -{ 0 }-> s28 :|: s28 >= 0, s28 <= 2 * (1 + z') + 0, z' >= 0, z - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' >= 0, z = 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z' >= 0, z - 2 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 *'(z, z') -{ 1 }-> 1 + #MULT(z, z') :|: z' >= 0, z >= 0 +'(z, z') -{ 1 }-> 1 + s2 :|: s2 >= 0, s2 <= z, z' >= 0, z >= 0 ATTACH(z, z') -{ 6 + 3*z' }-> 1 + s :|: s >= 0, s <= 0, z' >= 0, z >= 0 ATTACH#1(z, z') -{ 5 + 3*z' }-> 1 + s' :|: s' >= 0, s' <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 ATTACH#2(z, z', z'') -{ 7 + 3*z1 }-> 1 + s'' :|: s'' >= 0, s'' <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z', z) :|: z' >= 0, z >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MAKEBASE(z) -{ 3 + 4*z }-> 1 + s43 :|: s43 >= 0, s43 <= 2, z >= 0 MAKEBASE#1(z) -{ 2 + 4*z0 }-> 1 + s15 :|: s15 >= 0, s15 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', s45) :|: s45 >= 0, s45 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z', 0) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', s44)) :|: s44 >= 0, s44 <= 2 * z', z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z') :|: z' >= 0, z >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z, z') :|: z' >= 0, z >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult'(z, transAcc(z', makeBase(z'))), z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(0, z'') :|: z' >= 0, z >= 0, z'' >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z', z) :|: z' >= 0, z >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult'(z', transAcc(z0, makeBase(z0))), z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(0, z1) + MATRIXMULT(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, s49) :|: s49 >= 0, s49 <= inf, z' >= 0, z >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z, 0) :|: z' >= 0, z >= 0 MKBASE(z) -{ 1 + 4*z }-> 1 + s16 :|: s16 >= 0, s16 <= 0, z >= 0 MKBASE#1(z) -{ 2 + 4*z1 }-> 1 + s17 :|: s17 >= 0, s17 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z, z') :|: z' >= 0, z >= 0 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s37 :|: s37 >= 0, s37 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z', z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 2 }-> 1 + s36 + MULT(z'', z1) :|: s36 >= 0, s36 <= 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(0, mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), mult#1(z'', z1)) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(#mult(z', z0), 0) + MULT(z'', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 SPLIT(z) -{ 1 + 9*z }-> 1 + s10 :|: s10 >= 0, s10 <= 0, z >= 0 SPLIT#1(z) -{ 3 + 9*z1 }-> 1 + s11 :|: s11 >= 0, s11 <= 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 2 + 9*z' }-> 1 + s14 :|: s14 >= 0, s14 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z, z') :|: z' >= 0, z >= 0 TRANSACC#1(z, z') -{ 7 }-> 1 + s1 + TRANSACC(z1, z') :|: s1 >= 0, s1 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSACC#1(z, z') -{ 7 + 3*s38 }-> 1 + s39 + TRANSACC(z1, z') :|: s38 >= 0, s38 <= z1 + z', s39 >= 0, s39 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z, z) :|: z >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(s21) + s12 :|: s21 >= 0, s21 <= z' + 3, s12 >= 0, s12 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#1(z, z') -{ 2 + 9*z' }-> 1 + TRANSPOSE#2(0) + s13 :|: s13 >= 0, s13 <= 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, s46) :|: s46 >= 0, s46 <= 2 * z, z >= 0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z, 0) :|: z >= 0 attach(z, z') -{ 0 }-> s7 :|: s7 >= 0, s7 <= z + z' + 1, z' >= 0, z >= 0 attach(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#1(z, z') -{ 0 }-> s8 :|: s8 >= 0, s8 <= z' + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 attach#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 :|: z'' >= 0, z = 1, z' >= 0 attach#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + s9 :|: s9 >= 0, s9 <= z'' + z1 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z', z) :|: z' >= 0, z >= 0 lineMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 lineMult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 lineMult#1(z, z') -{ 0 }-> 1 + mult(z', z0) + lineMult(z', z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 makeBase(z) -{ 0 }-> s48 :|: s48 >= 0, s48 <= 2 * z, z >= 0 makeBase(z) -{ 0 }-> 0 :|: z >= 0 makeBase#1(z) -{ 0 }-> s18 :|: s18 >= 0, s18 <= 2 * z0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', s47)) :|: s47 >= 0, s47 <= 2 * z', z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> matrixMult'(z, transAcc(z', 0)) :|: z' >= 0, z >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z, z') :|: z' >= 0, z >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z') + matrixMult'(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mkBase(z) -{ 0 }-> s19 :|: s19 >= 0, s19 <= 2 * z, z >= 0 mkBase(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: z >= 0 mkBase#1(z) -{ 0 }-> 1 + 1 + s20 :|: s20 >= 0, s20 <= 2 * z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z, z') :|: z' >= 0, z >= 0 mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> mult#2(z', z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, 0 = 0 mult#1(z, z') -{ 0 }-> 0 :|: z = 1, z' >= 0, v0 >= 0, 0 = v0 mult#2(z, z', z'') -{ 0 }-> plus(0, mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(0, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), mult#1(z'', z1)) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> plus(#mult(z', z0), 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, 0 = 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: z'' >= 0, z = 1, z' >= 0, v0 >= 0, 0 = v0 plus(z, z') -{ 0 }-> s29 :|: s29 >= 0, s29 <= 2 * z + z', z' >= 0, z >= 0 plus(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split(z) -{ 0 }-> s22 :|: s22 >= 0, s22 <= z + 3, z >= 0 split(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> s23 :|: s23 >= 0, s23 <= z0 + z1 + 4, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: z >= 0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> s26 :|: s25 >= 0, s25 <= z' + 3, s26 >= 0, s26 <= s25 + z0 + z1 + 2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 split#2(z, z') -{ 0 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, v0 >= 0, z1 = v2, v1 >= 0, 0 = v0, z0 = v1, v2 >= 0 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z' >= 0 split#3(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z' + z0) + (1 + z'' + z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0, z'' >= 0 times(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 times(z, z') -{ 0 }-> #mult(z, z') :|: z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> s40 :|: s40 >= 0, s40 <= z + z', z' >= 0, z >= 0 transAcc(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transAcc#1(z, z') -{ 0 }-> s42 :|: s41 >= 0, s41 <= z1 + z', s42 >= 0, s42 <= z0 + s41 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> s6 :|: s6 >= 0, s6 <= z0 + 0 + 1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transAcc#1(z, z') -{ 0 }-> z' :|: z = 1, z' >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose(z) -{ 0 }-> s50 :|: s50 >= 0, s50 <= inf', z >= 0 transpose(z) -{ 0 }-> 0 :|: z >= 0 transpose#1(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= inf'', s24 >= 0, s24 <= z' + 3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= inf1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#1(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#2(z) -{ 0 }-> s53 :|: s53 >= 0, s53 <= inf2, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: z >= 0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z' >= 0 transpose#3(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 transpose#3(z, z') -{ 0 }-> 1 + z' + s54 :|: s54 >= 0, s54 <= inf3, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 Function symbols to be analyzed: {TRANSPOSE#2,TRANSPOSE#3,TRANSPOSE#1,TRANSPOSE}, {plus}, {#natmult}, {transAcc}, {TRANSACC#1,TRANSACC}, {MAKEBASE}, {makeBase}, {#mult}, {#NATMULT}, {TRANSPOSE'}, {times}, {mult#1,mult#2}, {#MULT}, {mult}, {*'}, {lineMult,lineMult#1}, {MULT,MULT#1,MULT#2}, {matrixMult',matrixMult'#1}, {LINEMULT,LINEMULT#1}, {matrixMult}, {MATRIXMULT'#1,MATRIXMULT'}, {MATRIXMULTOLD}, {MATRIXMULT}, {MATRIXMULT3}, {MATRIXMULTLIST#1,MATRIXMULTLIST} Previous analysis results are: split#3: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ATTACH#1: runtime: O(n^1) [5 + 3*z'], size: O(1) [0] ATTACH#2: runtime: O(n^1) [4 + 3*z], size: O(1) [2] ATTACH: runtime: O(n^1) [6 + 3*z'], size: O(1) [1] #ADD: runtime: O(1) [0], size: O(n^1) [z] attach#2: runtime: O(1) [0], size: O(n^1) [2 + z + z' + z''] attach: runtime: O(1) [0], size: O(n^1) [1 + z + z'] attach#1: runtime: O(1) [0], size: O(n^1) [1 + z + z'] SPLIT#1: runtime: O(n^1) [9*z], size: O(1) [0] SPLIT: runtime: O(n^1) [1 + 9*z], size: O(1) [1] SPLIT#2: runtime: O(n^1) [2 + 9*z'], size: O(1) [2] MKBASE#1: runtime: O(n^1) [4*z], size: O(1) [0] MKBASE: runtime: O(n^1) [1 + 4*z], size: O(1) [1] #abs: runtime: O(1) [0], size: O(1) [0] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] mkBase: runtime: O(1) [0], size: O(n^1) [2*z] mkBase#1: runtime: O(1) [0], size: O(n^1) [2*z] split#2: runtime: O(1) [0], size: O(n^1) [4 + z + z'] split#1: runtime: O(1) [0], size: O(n^1) [3 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] +': runtime: O(1) [1], size: O(n^1) [1 + z] transAcc#1: runtime: O(1) [0], size: O(n^1) [z + z'] MAKEBASE#1: runtime: O(n^1) [2 + 4*z], size: O(1) [2] makeBase#1: runtime: O(1) [0], size: O(n^1) [2*z] transpose#3: runtime: O(1) [0], size: INF transpose#2: runtime: O(1) [0], size: INF transpose#1: runtime: O(1) [0], size: INF transpose: runtime: O(1) [0], size: INF split: runtime: O(1) [0], size: O(n^1) [3 + z] TRANSPOSE#2: runtime: INF, size: O(1) [0] TRANSPOSE#3: runtime: ?, size: O(1) [4] TRANSPOSE#1: runtime: ?, size: O(1) [2] TRANSPOSE: runtime: ?, size: O(1) [3] ---------------------------------------- (281) 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: #MULT(v0, v1) -> null_#MULT [0] #NATMULT(v0, v1) -> null_#NATMULT [0] #ADD(v0, v1) -> null_#ADD [0] MATRIXMULT3(v0, v1, v2) -> null_MATRIXMULT3 [0] MATRIXMULTOLD(v0, v1) -> null_MATRIXMULTOLD [0] TRANSPOSE'(v0) -> null_TRANSPOSE' [0] #natmult(v0, v1) -> null_#natmult [0] #add(v0, v1) -> null_#add [0] #succ(v0) -> null_#succ [0] matrixMult(v0, v1) -> null_matrixMult [0] matrixMult'(v0, v1) -> null_matrixMult' [0] transAcc(v0, v1) -> null_transAcc [0] makeBase(v0) -> null_makeBase [0] makeBase#1(v0) -> null_makeBase#1 [0] mkBase(v0) -> null_mkBase [0] mkBase#1(v0) -> null_mkBase#1 [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] attach(v0, v1) -> null_attach [0] attach#1(v0, v1) -> null_attach#1 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] lineMult(v0, v1) -> null_lineMult [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] mult(v0, v1) -> null_mult [0] mult#1(v0, v1) -> null_mult#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] plus(v0, v1) -> null_plus [0] times(v0, v1) -> null_times [0] #mult(v0, v1) -> null_#mult [0] #pred(v0) -> null_#pred [0] #abs(v0) -> null_#abs [0] split(v0) -> null_split [0] split#1(v0) -> null_split#1 [0] split#2(v0, v1) -> null_split#2 [0] split#3(v0, v1, v2) -> null_split#3 [0] transpose(v0) -> null_transpose [0] transpose#1(v0, v1) -> null_transpose#1 [0] transpose#2(v0) -> null_transpose#2 [0] transpose#3(v0, v1) -> null_transpose#3 [0] ATTACH#1(v0, v1) -> null_ATTACH#1 [0] ATTACH#2(v0, v1, v2) -> null_ATTACH#2 [0] LINEMULT#1(v0, v1) -> null_LINEMULT#1 [0] MAKEBASE#1(v0) -> null_MAKEBASE#1 [0] MATRIXMULT'#1(v0, v1) -> null_MATRIXMULT'#1 [0] MATRIXMULTLIST#1(v0, v1) -> null_MATRIXMULTLIST#1 [0] MKBASE#1(v0) -> null_MKBASE#1 [0] MULT#1(v0, v1) -> null_MULT#1 [0] MULT#2(v0, v1, v2) -> null_MULT#2 [0] SPLIT#1(v0) -> null_SPLIT#1 [0] TRANSACC#1(v0, v1) -> null_TRANSACC#1 [0] TRANSPOSE#1(v0, v1) -> null_TRANSPOSE#1 [0] TRANSPOSE#2(v0) -> null_TRANSPOSE#2 [0] TRANSPOSE#3(v0, v1) -> null_TRANSPOSE#3 [0] SPLIT#2(v0, v1) -> null_SPLIT#2 [0] And the following fresh constants: null_#MULT, null_#NATMULT, null_#ADD, null_MATRIXMULT3, null_MATRIXMULTOLD, null_TRANSPOSE', null_#natmult, null_#add, null_#succ, null_matrixMult, null_matrixMult', null_transAcc, null_makeBase, null_makeBase#1, null_mkBase, null_mkBase#1, null_transAcc#1, null_attach, null_attach#1, null_attach#2, null_matrixMult'#1, null_lineMult, null_lineMult#1, null_mult, null_mult#1, null_mult#2, null_plus, null_times, null_#mult, null_#pred, null_#abs, null_split, null_split#1, null_split#2, null_split#3, null_transpose, null_transpose#1, null_transpose#2, null_transpose#3, null_ATTACH#1, null_ATTACH#2, null_LINEMULT#1, null_MAKEBASE#1, null_MATRIXMULT'#1, null_MATRIXMULTLIST#1, null_MKBASE#1, null_MULT#1, null_MULT#2, null_SPLIT#1, null_TRANSACC#1, null_TRANSPOSE#1, null_TRANSPOSE#2, null_TRANSPOSE#3, null_SPLIT#2, const, const1, const2, const3, const4, const5, const6 ---------------------------------------- (282) 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: *'(z0, z1) -> c28(#MULT(z0, z1)) [1] +'(z0, z1) -> c29(#ADD(z0, z1)) [1] ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) [1] ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) [1] ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) [1] LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) [1] LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) [1] MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) [1] MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) [1] MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) [1] MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) [1] MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) [1] MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) [1] MKBASE(z0) -> c76(MKBASE#1(z0)) [1] MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) [1] MULT(z0, z1) -> c79(MULT#1(z0, z1)) [1] MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c83(+'(times(z2, z0), mult(z3, z1)), MULT(z3, z1)) [1] SPLIT(z0) -> c85(SPLIT#1(z0)) [1] SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) [1] TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) [1] TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) [1] TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) [1] TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) [1] TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) [1] TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) [1] SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) [1] MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) [1] MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) [1] MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) [1] MULT#2(::(z0, z1), z2, z3) -> c(+'(times(z2, z0), mult(z3, z1))) [1] MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) [1] #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) [0] #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) [0] #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) [0] #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) [0] #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) [0] #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) [0] MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) [0] MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) [0] TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) [0] #natmult(#0, z0) -> #0 [0] #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) [0] #add(#pos(#s(#0)), z0) -> #succ(z0) [0] #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) [0] #add(#0, z0) -> z0 [0] #add(#neg(#s(#0)), z0) -> #pred(z0) [0] #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) [0] #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) [0] matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) [0] matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) [0] transAcc(z0, z1) -> transAcc#1(z0, z1) [0] makeBase(z0) -> makeBase#1(z0) [0] makeBase#1(::(z0, z1)) -> mkBase(z0) [0] makeBase#1(nil) -> nil [0] mkBase(z0) -> mkBase#1(z0) [0] mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) [0] mkBase#1(nil) -> nil [0] transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) [0] transAcc#1(nil, z0) -> z0 [0] attach(z0, z1) -> attach#1(z0, z1) [0] attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) [0] attach#1(nil, z0) -> nil [0] attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) [0] attach#2(nil, z0, z1) -> nil [0] matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) [0] matrixMult'#1(nil, z0) -> nil [0] lineMult(z0, z1) -> lineMult#1(z1, z0) [0] lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) [0] lineMult#1(nil, z0) -> nil [0] mult(z0, z1) -> mult#1(z0, z1) [0] mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) [0] mult#1(nil, z0) -> #abs(#0) [0] mult#2(::(z0, z1), z2, z3) -> plus(times(z2, z0), mult(z3, z1)) [0] mult#2(nil, z0, z1) -> #abs(#0) [0] plus(z0, z1) -> #add(z0, z1) [0] times(z0, z1) -> #mult(z0, z1) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(z0)) -> #0 [0] #mult(#0, #pos(z0)) -> #0 [0] #mult(#neg(z0), #0) -> #0 [0] #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) [0] #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #0) -> #0 [0] #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) [0] #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) [0] #abs(#0) -> #0 [0] split(z0) -> split#1(z0) [0] split#1(::(z0, z1)) -> split#2(z0, z1) [0] split#1(nil) -> tuple#2(nil, nil) [0] split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) [0] split#2(nil, z0) -> tuple#2(nil, nil) [0] split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) [0] transpose(z0) -> transpose#1(z0, z0) [0] transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) [0] transpose#1(nil, z0) -> nil [0] transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) [0] transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) [0] transpose#3(nil, z0) -> nil [0] #MULT(v0, v1) -> null_#MULT [0] #NATMULT(v0, v1) -> null_#NATMULT [0] #ADD(v0, v1) -> null_#ADD [0] MATRIXMULT3(v0, v1, v2) -> null_MATRIXMULT3 [0] MATRIXMULTOLD(v0, v1) -> null_MATRIXMULTOLD [0] TRANSPOSE'(v0) -> null_TRANSPOSE' [0] #natmult(v0, v1) -> null_#natmult [0] #add(v0, v1) -> null_#add [0] #succ(v0) -> null_#succ [0] matrixMult(v0, v1) -> null_matrixMult [0] matrixMult'(v0, v1) -> null_matrixMult' [0] transAcc(v0, v1) -> null_transAcc [0] makeBase(v0) -> null_makeBase [0] makeBase#1(v0) -> null_makeBase#1 [0] mkBase(v0) -> null_mkBase [0] mkBase#1(v0) -> null_mkBase#1 [0] transAcc#1(v0, v1) -> null_transAcc#1 [0] attach(v0, v1) -> null_attach [0] attach#1(v0, v1) -> null_attach#1 [0] attach#2(v0, v1, v2) -> null_attach#2 [0] matrixMult'#1(v0, v1) -> null_matrixMult'#1 [0] lineMult(v0, v1) -> null_lineMult [0] lineMult#1(v0, v1) -> null_lineMult#1 [0] mult(v0, v1) -> null_mult [0] mult#1(v0, v1) -> null_mult#1 [0] mult#2(v0, v1, v2) -> null_mult#2 [0] plus(v0, v1) -> null_plus [0] times(v0, v1) -> null_times [0] #mult(v0, v1) -> null_#mult [0] #pred(v0) -> null_#pred [0] #abs(v0) -> null_#abs [0] split(v0) -> null_split [0] split#1(v0) -> null_split#1 [0] split#2(v0, v1) -> null_split#2 [0] split#3(v0, v1, v2) -> null_split#3 [0] transpose(v0) -> null_transpose [0] transpose#1(v0, v1) -> null_transpose#1 [0] transpose#2(v0) -> null_transpose#2 [0] transpose#3(v0, v1) -> null_transpose#3 [0] ATTACH#1(v0, v1) -> null_ATTACH#1 [0] ATTACH#2(v0, v1, v2) -> null_ATTACH#2 [0] LINEMULT#1(v0, v1) -> null_LINEMULT#1 [0] MAKEBASE#1(v0) -> null_MAKEBASE#1 [0] MATRIXMULT'#1(v0, v1) -> null_MATRIXMULT'#1 [0] MATRIXMULTLIST#1(v0, v1) -> null_MATRIXMULTLIST#1 [0] MKBASE#1(v0) -> null_MKBASE#1 [0] MULT#1(v0, v1) -> null_MULT#1 [0] MULT#2(v0, v1, v2) -> null_MULT#2 [0] SPLIT#1(v0) -> null_SPLIT#1 [0] TRANSACC#1(v0, v1) -> null_TRANSACC#1 [0] TRANSPOSE#1(v0, v1) -> null_TRANSPOSE#1 [0] TRANSPOSE#2(v0) -> null_TRANSPOSE#2 [0] TRANSPOSE#3(v0, v1) -> null_TRANSPOSE#3 [0] SPLIT#2(v0, v1) -> null_SPLIT#2 [0] The TRS has the following type information: *' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 c28 :: c9:c10:c12:c13:null_#MULT -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 #MULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c9:c10:c12:c13:null_#MULT +' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 c29 :: c2:c4:null_#ADD -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 #ADD :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c2:c4:null_#ADD ATTACH :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c30 c30 :: c31:null_ATTACH#1 -> c30 ATTACH#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c31:null_ATTACH#1 :: :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c31 :: c33:null_ATTACH#2 -> c31:null_ATTACH#1 ATTACH#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c33:null_ATTACH#2 c33 :: c30 -> c33:null_ATTACH#2 LINEMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c35 c35 :: c36:c37:null_LINEMULT#1 -> c35 LINEMULT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c36:c37:null_LINEMULT#1 c36 :: c79 -> c36:c37:null_LINEMULT#1 MULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c79 c37 :: c35 -> c36:c37:null_LINEMULT#1 MAKEBASE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 c63 :: c64:null_MAKEBASE#1 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 MAKEBASE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c64:null_MAKEBASE#1 c64 :: c76 -> c64:null_MAKEBASE#1 MKBASE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c76 MATRIXMULT' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 c67 :: c68:c69:null_MATRIXMULT'#1 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 MATRIXMULT'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c68:c69:null_MATRIXMULT'#1 c68 :: c35 -> c68:c69:null_MATRIXMULT'#1 c69 :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 -> c68:c69:null_MATRIXMULT'#1 MATRIXMULTLIST :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c72 c72 :: c73:null_MATRIXMULTLIST#1 -> c72 MATRIXMULTLIST#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c73:null_MATRIXMULTLIST#1 c73 :: c72 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 -> c73:null_MATRIXMULTLIST#1 matrixMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 MATRIXMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 c76 :: c77:null_MKBASE#1 -> c76 MKBASE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c77:null_MKBASE#1 c77 :: c76 -> c77:null_MKBASE#1 c79 :: c80:null_MULT#1 -> c79 MULT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c80:null_MULT#1 c80 :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 -> c80:null_MULT#1 MULT#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 c83 :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 -> c79 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 times :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 SPLIT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c85 c85 :: c86:null_SPLIT#1 -> c85 SPLIT#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c86:null_SPLIT#1 c86 :: c88:null_SPLIT#2 -> c86:null_SPLIT#1 SPLIT#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c88:null_SPLIT#2 TRANSACC :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 c91 :: c92:null_TRANSACC#1 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 TRANSACC#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c92:null_TRANSACC#1 c92 :: c30 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 -> c92:null_TRANSACC#1 transAcc :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 TRANSPOSE :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c94 c94 :: c95:null_TRANSPOSE#1 -> c94 TRANSPOSE#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c95:null_TRANSPOSE#1 c95 :: c97:null_TRANSPOSE#2 -> c85 -> c95:null_TRANSPOSE#1 TRANSPOSE#2 :: tuple#2:null_split:null_split#1:null_split#2:null_split#3 -> c97:null_TRANSPOSE#2 split :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split:null_split#1:null_split#2:null_split#3 tuple#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split:null_split#1:null_split#2:null_split#3 c97 :: c98:null_TRANSPOSE#3 -> c97:null_TRANSPOSE#2 TRANSPOSE#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c98:null_TRANSPOSE#3 c98 :: c94 -> c98:null_TRANSPOSE#3 c88 :: c85 -> c88:null_SPLIT#2 c :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 makeBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #neg :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c9 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT #NATMULT :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c15:null_#NATMULT #pos :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c10 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT c12 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT c13 :: c15:null_#NATMULT -> c9:c10:c12:c13:null_#MULT #s :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c15 :: c2:c4:null_#ADD -> c15:null_#NATMULT -> c15:null_#NATMULT #natmult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 c2 :: c2:c4:null_#ADD -> c2:c4:null_#ADD c4 :: c2:c4:null_#ADD -> c2:c4:null_#ADD MATRIXMULT3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 MATRIXMULTOLD :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 transpose :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 TRANSPOSE' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 #0 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #add :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #succ :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #pred :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 matrixMult'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transAcc#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 makeBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mkBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 nil :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mkBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 attach#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 lineMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 lineMult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 mult#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #abs :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 plus :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 #mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 split#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split:null_split#1:null_split#2:null_split#3 split#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split:null_split#1:null_split#2:null_split#3 split#3 :: tuple#2:null_split:null_split#1:null_split#2:null_split#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> tuple#2:null_split:null_split#1:null_split#2:null_split#3 transpose#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transpose#2 :: tuple#2:null_split:null_split#1:null_split#2:null_split#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 transpose#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 -> :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#MULT :: c9:c10:c12:c13:null_#MULT null_#NATMULT :: c15:null_#NATMULT null_#ADD :: c2:c4:null_#ADD null_MATRIXMULT3 :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 null_MATRIXMULTOLD :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 null_TRANSPOSE' :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 null_#natmult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#add :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#succ :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult' :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transAcc :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_makeBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_makeBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mkBase :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mkBase#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transAcc#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_attach#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_matrixMult'#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_lineMult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_lineMult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_mult#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_plus :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_times :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#mult :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#pred :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_#abs :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_split :: tuple#2:null_split:null_split#1:null_split#2:null_split#3 null_split#1 :: tuple#2:null_split:null_split#1:null_split#2:null_split#3 null_split#2 :: tuple#2:null_split:null_split#1:null_split#2:null_split#3 null_split#3 :: tuple#2:null_split:null_split#1:null_split#2:null_split#3 null_transpose :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#1 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#2 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_transpose#3 :: :::#neg:#pos:#s:#0:nil:null_#natmult:null_#add:null_#succ:null_matrixMult:null_matrixMult':null_transAcc:null_makeBase:null_makeBase#1:null_mkBase:null_mkBase#1:null_transAcc#1:null_attach:null_attach#1:null_attach#2:null_matrixMult'#1:null_lineMult:null_lineMult#1:null_mult:null_mult#1:null_mult#2:null_plus:null_times:null_#mult:null_#pred:null_#abs:null_transpose:null_transpose#1:null_transpose#2:null_transpose#3 null_ATTACH#1 :: c31:null_ATTACH#1 null_ATTACH#2 :: c33:null_ATTACH#2 null_LINEMULT#1 :: c36:c37:null_LINEMULT#1 null_MAKEBASE#1 :: c64:null_MAKEBASE#1 null_MATRIXMULT'#1 :: c68:c69:null_MATRIXMULT'#1 null_MATRIXMULTLIST#1 :: c73:null_MATRIXMULTLIST#1 null_MKBASE#1 :: c77:null_MKBASE#1 null_MULT#1 :: c80:null_MULT#1 null_MULT#2 :: c28:c29:c63:c67:c83:c91:c:null_MATRIXMULT3:null_MATRIXMULTOLD:null_TRANSPOSE':null_MULT#2 null_SPLIT#1 :: c86:null_SPLIT#1 null_TRANSACC#1 :: c92:null_TRANSACC#1 null_TRANSPOSE#1 :: c95:null_TRANSPOSE#1 null_TRANSPOSE#2 :: c97:null_TRANSPOSE#2 null_TRANSPOSE#3 :: c98:null_TRANSPOSE#3 null_SPLIT#2 :: c88:null_SPLIT#2 const :: c30 const1 :: c35 const2 :: c79 const3 :: c76 const4 :: c72 const5 :: c85 const6 :: c94 Rewrite Strategy: INNERMOST ---------------------------------------- (283) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: #0 => 0 nil => 1 null_#MULT => 0 null_#NATMULT => 0 null_#ADD => 0 null_MATRIXMULT3 => 0 null_MATRIXMULTOLD => 0 null_TRANSPOSE' => 0 null_#natmult => 0 null_#add => 0 null_#succ => 0 null_matrixMult => 0 null_matrixMult' => 0 null_transAcc => 0 null_makeBase => 0 null_makeBase#1 => 0 null_mkBase => 0 null_mkBase#1 => 0 null_transAcc#1 => 0 null_attach => 0 null_attach#1 => 0 null_attach#2 => 0 null_matrixMult'#1 => 0 null_lineMult => 0 null_lineMult#1 => 0 null_mult => 0 null_mult#1 => 0 null_mult#2 => 0 null_plus => 0 null_times => 0 null_#mult => 0 null_#pred => 0 null_#abs => 0 null_split => 0 null_split#1 => 0 null_split#2 => 0 null_split#3 => 0 null_transpose => 0 null_transpose#1 => 0 null_transpose#2 => 0 null_transpose#3 => 0 null_ATTACH#1 => 0 null_ATTACH#2 => 0 null_LINEMULT#1 => 0 null_MAKEBASE#1 => 0 null_MATRIXMULT'#1 => 0 null_MATRIXMULTLIST#1 => 0 null_MKBASE#1 => 0 null_MULT#1 => 0 null_MULT#2 => 0 null_SPLIT#1 => 0 null_TRANSACC#1 => 0 null_TRANSPOSE#1 => 0 null_TRANSPOSE#2 => 0 null_TRANSPOSE#3 => 0 null_SPLIT#2 => 0 const => 0 const1 => 0 const2 => 0 const3 => 0 const4 => 0 const5 => 0 const6 => 0 ---------------------------------------- (284) Obligation: Complexity RNTS consisting of the following rules: #ADD(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #ADD(z, z') -{ 0 }-> 1 + #ADD(1 + (1 + z0), z1) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #MULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #MULT(z, z') -{ 0 }-> 1 + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #NATMULT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #NATMULT(z, z') -{ 0 }-> 1 + #ADD(1 + z1, #natmult(z0, z1)) + #NATMULT(z0, z1) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #abs(z) -{ 0 }-> 0 :|: z = 0 #abs(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #add(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> #succ(z0) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0 #add(z, z') -{ 0 }-> #succ(#add(1 + (1 + z0), z1)) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #add(z, z') -{ 0 }-> #pred(z0) :|: z = 1 + (1 + 0), z0 >= 0, z' = z0 #add(z, z') -{ 0 }-> #pred(#add(1 + (1 + z0), z1)) :|: z1 >= 0, z' = z1, z0 >= 0, z = 1 + (1 + (1 + z0)) #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z' = 1 + z0, z = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 1 + z0, z0 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 #natmult(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + z1, #natmult(z0, z1)) :|: z1 >= 0, z = 1 + z0, z' = z1, z0 >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + z0) :|: z0 >= 0, z = 1 + (1 + (1 + z0)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + z0)) :|: z0 >= 0, z = 1 + (1 + z0) *'(z, z') -{ 1 }-> 1 + #MULT(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 +'(z, z') -{ 1 }-> 1 + #ADD(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ATTACH(z, z') -{ 1 }-> 1 + ATTACH#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 ATTACH#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 ATTACH#1(z, z') -{ 1 }-> 1 + ATTACH#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 ATTACH#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 ATTACH#2(z, z', z'') -{ 1 }-> 1 + ATTACH(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 LINEMULT(z, z') -{ 1 }-> 1 + LINEMULT#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 LINEMULT#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 LINEMULT#1(z, z') -{ 1 }-> 1 + MULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 LINEMULT#1(z, z') -{ 1 }-> 1 + LINEMULT(z2, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MAKEBASE(z) -{ 1 }-> 1 + MAKEBASE#1(z0) :|: z = z0, z0 >= 0 MAKEBASE#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 MAKEBASE#1(z) -{ 1 }-> 1 + MKBASE(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MATRIXMULT(z, z') -{ 1 }-> 1 + TRANSACC(z1, makeBase(z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MATRIXMULT'(z0, transAcc(z1, makeBase(z1))) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT(z, z') -{ 1 }-> 1 + MAKEBASE(z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT'(z, z') -{ 1 }-> 1 + MATRIXMULT'#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULT'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + MATRIXMULT'(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULT'#1(z, z') -{ 1 }-> 1 + LINEMULT(z0, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 MATRIXMULT3(z, z', z'') -{ 0 }-> 1 + MATRIXMULT(matrixMult(z0, z1), z2) :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 MATRIXMULTLIST(z, z') -{ 1 }-> 1 + MATRIXMULTLIST#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MATRIXMULTLIST#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MATRIXMULTLIST#1(z, z') -{ 1 }-> 1 + MATRIXMULTLIST(matrixMult(z2, z0), z1) + MATRIXMULT(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MATRIXMULTOLD(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MATRIXMULTOLD(z, z') -{ 0 }-> 1 + MATRIXMULT'(z0, transpose(z1)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MKBASE(z) -{ 1 }-> 1 + MKBASE#1(z0) :|: z = z0, z0 >= 0 MKBASE#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 MKBASE#1(z) -{ 1 }-> 1 + MKBASE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 MULT(z, z') -{ 1 }-> 1 + MULT#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 MULT#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MULT#1(z, z') -{ 1 }-> 1 + MULT#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 MULT#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(times(z2, z0), mult(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + *'(z2, z0) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 MULT#2(z, z', z'') -{ 1 }-> 1 + +'(times(z2, z0), mult(z3, z1)) + MULT(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 SPLIT(z) -{ 1 }-> 1 + SPLIT#1(z0) :|: z = z0, z0 >= 0 SPLIT#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 SPLIT#1(z) -{ 1 }-> 1 + SPLIT#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 SPLIT#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 SPLIT#2(z, z') -{ 1 }-> 1 + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSACC(z, z') -{ 1 }-> 1 + TRANSACC#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 TRANSACC#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 TRANSACC#1(z, z') -{ 1 }-> 1 + ATTACH(z0, transAcc(z1, z2)) + TRANSACC(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE(z) -{ 1 }-> 1 + TRANSPOSE#1(z0, z0) :|: z = z0, z0 >= 0 TRANSPOSE#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 TRANSPOSE#1(z, z') -{ 1 }-> 1 + TRANSPOSE#2(split(z2)) + SPLIT(z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 TRANSPOSE#2(z) -{ 1 }-> 1 + TRANSPOSE#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TRANSPOSE#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 TRANSPOSE#3(z, z') -{ 1 }-> 1 + TRANSPOSE(1 + z0 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 TRANSPOSE'(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 TRANSPOSE'(z) -{ 0 }-> 1 + TRANSACC(z0, makeBase(z0)) :|: z = z0, z0 >= 0 attach(z, z') -{ 0 }-> attach#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 attach(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#1(z, z') -{ 0 }-> attach#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 attach#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 attach#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 attach#2(z, z', z'') -{ 0 }-> 1 :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 attach#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 attach#2(z, z', z'') -{ 0 }-> 1 + (1 + z2 + z0) + attach(z3, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 lineMult(z, z') -{ 0 }-> lineMult#1(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 lineMult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 lineMult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 lineMult#1(z, z') -{ 0 }-> 1 + mult(z2, z0) + lineMult(z2, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 makeBase(z) -{ 0 }-> makeBase#1(z0) :|: z = z0, z0 >= 0 makeBase(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 makeBase#1(z) -{ 0 }-> mkBase(z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 makeBase#1(z) -{ 0 }-> 1 :|: z = 1 makeBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 matrixMult(z, z') -{ 0 }-> matrixMult'(z0, transAcc(z1, makeBase(z1))) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'(z, z') -{ 0 }-> matrixMult'#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 matrixMult'(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 matrixMult'#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 matrixMult'#1(z, z') -{ 0 }-> 1 + lineMult(z0, z2) + matrixMult'(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 mkBase(z) -{ 0 }-> mkBase#1(z0) :|: z = z0, z0 >= 0 mkBase(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 0 }-> 1 :|: z = 1 mkBase#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mkBase#1(z) -{ 0 }-> 1 + 1 + mkBase(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 mult(z, z') -{ 0 }-> mult#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 0 }-> mult#2(z2, z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 mult#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 mult#1(z, z') -{ 0 }-> #abs(0) :|: z = 1, z0 >= 0, z' = z0 mult#2(z, z', z'') -{ 0 }-> plus(times(z2, z0), mult(z3, z1)) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 mult#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 mult#2(z, z', z'') -{ 0 }-> #abs(0) :|: z1 >= 0, z = 1, z0 >= 0, z' = z0, z'' = z1 plus(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 plus(z, z') -{ 0 }-> #add(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 split(z) -{ 0 }-> split#1(z0) :|: z = z0, z0 >= 0 split(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 0 }-> split#2(z0, z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 split#1(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 split#1(z) -{ 0 }-> 1 + 1 + 1 :|: z = 1 split#2(z, z') -{ 0 }-> split#3(split(z2), z0, z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 split#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 split#2(z, z') -{ 0 }-> 1 + 1 + 1 :|: z = 1, z0 >= 0, z' = z0 split#3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 split#3(z, z', z'') -{ 0 }-> 1 + (1 + z2 + z0) + (1 + z3 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z'' = z3, z = 1 + z0 + z1, z2 >= 0, z3 >= 0 times(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 times(z, z') -{ 0 }-> #mult(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 transAcc(z, z') -{ 0 }-> transAcc#1(z0, z1) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 transAcc(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transAcc#1(z, z') -{ 0 }-> z0 :|: z = 1, z0 >= 0, z' = z0 transAcc#1(z, z') -{ 0 }-> attach(z0, transAcc(z1, z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transAcc#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose(z) -{ 0 }-> transpose#1(z0, z0) :|: z = z0, z0 >= 0 transpose(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#1(z, z') -{ 0 }-> transpose#2(split(z2)) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 transpose#1(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 transpose#1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#2(z) -{ 0 }-> transpose#3(z1, z0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 transpose#2(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 transpose#3(z, z') -{ 0 }-> 1 :|: z = 1, z0 >= 0, z' = z0 transpose#3(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 transpose#3(z, z') -{ 0 }-> 1 + z2 + transpose(1 + z0 + z1) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (285) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = [1] + x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_1 + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_1 + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = [1] + x_1 POL(MAKEBASE#1(x_1)) = x_1 POL(MATRIXMULT(x_1, x_2)) = [1] + x_2 POL(MATRIXMULT'(x_1, x_2)) = 0 POL(MATRIXMULT'#1(x_1, x_2)) = 0 POL(MATRIXMULT3(x_1, x_2, x_3)) = [1] + x_3 POL(MATRIXMULTLIST(x_1, x_2)) = x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = x_1 POL(MATRIXMULTOLD(x_1, x_2)) = 0 POL(MKBASE(x_1)) = 0 POL(MKBASE#1(x_1)) = 0 POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = [1] POL(TRANSACC#1(x_1, x_2)) = [1] POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = [1] POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = [1] + x_1 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = [1] + x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(transAcc(x_1, x_2)) = 0 POL(transAcc#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose(x_1)) = [1] POL(transpose#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = [1] ---------------------------------------- (286) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (287) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = [1] + x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_1 + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_1 + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = x_1 POL(MAKEBASE#1(x_1)) = x_1 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT'(x_1, x_2)) = 0 POL(MATRIXMULT'#1(x_1, x_2)) = 0 POL(MATRIXMULT3(x_1, x_2, x_3)) = x_3 POL(MATRIXMULTLIST(x_1, x_2)) = [1] + x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = [1] + x_1 POL(MATRIXMULTOLD(x_1, x_2)) = 0 POL(MKBASE(x_1)) = [1] + x_1 POL(MKBASE#1(x_1)) = x_1 POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = 0 POL(TRANSACC#1(x_1, x_2)) = 0 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = 0 POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = [1] + x_1 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = [1] + x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 + x_2 POL(transAcc#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose(x_1)) = [1] POL(transpose#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = [1] ---------------------------------------- (288) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (289) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) ---------------------------------------- (290) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (291) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = [1] + x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = 0 POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_1 + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_1 + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = x_1 POL(MAKEBASE#1(x_1)) = x_1 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT'(x_1, x_2)) = 0 POL(MATRIXMULT'#1(x_1, x_2)) = 0 POL(MATRIXMULT3(x_1, x_2, x_3)) = x_3 POL(MATRIXMULTLIST(x_1, x_2)) = [1] + x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = [1] + x_1 POL(MATRIXMULTOLD(x_1, x_2)) = 0 POL(MKBASE(x_1)) = [1] + x_1 POL(MKBASE#1(x_1)) = x_1 POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = x_1 POL(TRANSACC#1(x_1, x_2)) = x_1 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = x_1 POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = [1] + x_1 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = [1] + x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 + x_2 POL(transAcc#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose(x_1)) = [1] POL(transpose#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = [1] ---------------------------------------- (292) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (293) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) ---------------------------------------- (294) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (295) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [3] + [3]x_1 POL(#add(x_1, x_2)) = [3] POL(#mult(x_1, x_2)) = [3] POL(#natmult(x_1, x_2)) = [3]x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [3] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [3] POL(*(x_1, x_2)) = 0 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [3] POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [3] + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = [2] POL(MAKEBASE#1(x_1)) = [2] POL(MATRIXMULT(x_1, x_2)) = [2] POL(MATRIXMULT'(x_1, x_2)) = [2] POL(MATRIXMULT'#1(x_1, x_2)) = [2] POL(MATRIXMULT3(x_1, x_2, x_3)) = [3] POL(MATRIXMULTLIST(x_1, x_2)) = [3]x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = [3]x_1 POL(MATRIXMULTOLD(x_1, x_2)) = [2] + x_2 POL(MKBASE(x_1)) = [2] POL(MKBASE#1(x_1)) = [2] POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = 0 POL(TRANSACC#1(x_1, x_2)) = 0 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = x_1 POL(attach(x_1, x_2)) = [3] + [3]x_1 POL(attach#1(x_1, x_2)) = [3] + [3]x_2 POL(attach#2(x_1, x_2, x_3)) = [3] + [3]x_2 + [3]x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [3] + [3]x_1 + [3]x_2 POL(lineMult#1(x_1, x_2)) = [3] + [3]x_2 POL(makeBase(x_1)) = 0 POL(makeBase#1(x_1)) = [3] POL(matrixMult(x_1, x_2)) = [2]x_1 POL(matrixMult'(x_1, x_2)) = [3] + [3]x_1 POL(matrixMult'#1(x_1, x_2)) = [3] + [3]x_2 POL(mkBase(x_1)) = [3] + [3]x_1 POL(mkBase#1(x_1)) = [3] POL(mult(x_1, x_2)) = [3]x_2 POL(mult#1(x_1, x_2)) = [3] + [3]x_2 POL(mult#2(x_1, x_2, x_3)) = [3] + [3]x_2 + [3]x_3 POL(nil) = 0 POL(split(x_1)) = 0 POL(split#1(x_1)) = [3] POL(split#2(x_1, x_2)) = [3] + [3]x_2 POL(split#3(x_1, x_2, x_3)) = [3] + [3]x_2 + [3]x_3 POL(transAcc(x_1, x_2)) = 0 POL(transAcc#1(x_1, x_2)) = [3] + [3]x_2 POL(transpose(x_1)) = [1] POL(transpose#1(x_1, x_2)) = [1] POL(transpose#2(x_1)) = [1] + [3]x_1 POL(transpose#3(x_1, x_2)) = [1] + [3]x_1 POL(tuple#2(x_1, x_2)) = x_2 ---------------------------------------- (296) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (297) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = [1] + x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_1 + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_1 + x_2 POL(ATTACH(x_1, x_2)) = x_1 POL(ATTACH#1(x_1, x_2)) = x_1 POL(ATTACH#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = x_1 POL(MAKEBASE#1(x_1)) = x_1 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT'(x_1, x_2)) = 0 POL(MATRIXMULT'#1(x_1, x_2)) = 0 POL(MATRIXMULT3(x_1, x_2, x_3)) = x_3 POL(MATRIXMULTLIST(x_1, x_2)) = [1] + x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = [1] + x_1 POL(MATRIXMULTOLD(x_1, x_2)) = 0 POL(MKBASE(x_1)) = [1] + x_1 POL(MKBASE#1(x_1)) = x_1 POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = x_1 POL(TRANSACC#1(x_1, x_2)) = x_1 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = x_1 POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = [1] + x_1 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = [1] + x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 + x_2 POL(transAcc#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose(x_1)) = [1] POL(transpose#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = [1] ---------------------------------------- (298) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (299) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ---------------------------------------- (300) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (301) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = [1] + x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_1 + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = [1] POL(LINEMULT#1(x_1, x_2)) = [1] POL(MAKEBASE(x_1)) = [1] POL(MAKEBASE#1(x_1)) = [1] POL(MATRIXMULT(x_1, x_2)) = [1] POL(MATRIXMULT'(x_1, x_2)) = [1] POL(MATRIXMULT'#1(x_1, x_2)) = [1] POL(MATRIXMULT3(x_1, x_2, x_3)) = [1] POL(MATRIXMULTLIST(x_1, x_2)) = [1] + x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = [1] + x_1 POL(MATRIXMULTOLD(x_1, x_2)) = [1] POL(MKBASE(x_1)) = [1] POL(MKBASE#1(x_1)) = [1] POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = [1] POL(TRANSACC#1(x_1, x_2)) = [1] POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = [1] POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = [1] + x_1 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 + x_2 POL(transAcc#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose(x_1)) = [1] + x_1 POL(transpose#1(x_1, x_2)) = [1] + x_2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = [1] ---------------------------------------- (302) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (303) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = x_1 POL(#add(x_1, x_2)) = [1] + x_2 POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = [1] + x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = 0 POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = [1] POL(+(x_1, x_2)) = [1] + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = [1] POL(LINEMULT#1(x_1, x_2)) = [1] POL(MAKEBASE(x_1)) = [1] POL(MAKEBASE#1(x_1)) = [1] POL(MATRIXMULT(x_1, x_2)) = [1] POL(MATRIXMULT'(x_1, x_2)) = [1] POL(MATRIXMULT'#1(x_1, x_2)) = [1] POL(MATRIXMULT3(x_1, x_2, x_3)) = [1] POL(MATRIXMULTLIST(x_1, x_2)) = x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = x_1 POL(MATRIXMULTOLD(x_1, x_2)) = [1] POL(MKBASE(x_1)) = [1] POL(MKBASE#1(x_1)) = [1] POL(MULT(x_1, x_2)) = [1] POL(MULT#1(x_1, x_2)) = [1] POL(MULT#2(x_1, x_2, x_3)) = [1] POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = [1] POL(TRANSACC#1(x_1, x_2)) = [1] POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = [1] POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = [1] + x_1 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = [1] + x_1 + x_2 POL(mult#1(x_1, x_2)) = x_1 + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_1 + x_3 POL(nil) = 0 POL(split(x_1)) = x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(transAcc(x_1, x_2)) = [1] + x_1 + x_2 POL(transAcc#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose(x_1)) = [1] + x_1 POL(transpose#1(x_1, x_2)) = [1] + x_2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = [1] ---------------------------------------- (304) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (305) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = [1] + x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_1 + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = [1] POL(LINEMULT#1(x_1, x_2)) = [1] POL(MAKEBASE(x_1)) = [1] POL(MAKEBASE#1(x_1)) = [1] POL(MATRIXMULT(x_1, x_2)) = [1] POL(MATRIXMULT'(x_1, x_2)) = [1] POL(MATRIXMULT'#1(x_1, x_2)) = [1] POL(MATRIXMULT3(x_1, x_2, x_3)) = [1] POL(MATRIXMULTLIST(x_1, x_2)) = [1] + x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = [1] + x_1 POL(MATRIXMULTOLD(x_1, x_2)) = [1] POL(MKBASE(x_1)) = [1] POL(MKBASE#1(x_1)) = [1] POL(MULT(x_1, x_2)) = [1] POL(MULT#1(x_1, x_2)) = [1] POL(MULT#2(x_1, x_2, x_3)) = [1] POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = [1] POL(TRANSACC#1(x_1, x_2)) = [1] POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = [1] POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = [1] + x_1 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'(x_1, x_2)) = [1] + x_1 + x_2 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 + x_2 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = [1] + x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = [1] + x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(transAcc(x_1, x_2)) = [1] + x_1 + x_2 POL(transAcc#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose(x_1)) = [1] POL(transpose#1(x_1, x_2)) = [1] + x_1 + x_2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = [1] ---------------------------------------- (306) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (307) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) We considered the (Usable) Rules: matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 + x_1^2 POL(#add(x_1, x_2)) = 0 POL(#mult(x_1, x_2)) = [1] + x_1 + x_2 + x_2^2 + x_1*x_2 + x_1^2 POL(#natmult(x_1, x_2)) = [2]x_1 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = x_1 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = 0 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_2 + x_2^2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [2] + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = 0 POL(MAKEBASE#1(x_1)) = 0 POL(MATRIXMULT(x_1, x_2)) = [2]x_1 POL(MATRIXMULT'(x_1, x_2)) = [2]x_1 POL(MATRIXMULT'#1(x_1, x_2)) = [2]x_1 POL(MATRIXMULT3(x_1, x_2, x_3)) = [1] + [2]x_1 + [2]x_2 + x_3 + [2]x_3^2 + x_2*x_3 + x_1*x_3 + [2]x_1^2 + x_1*x_2 + [2]x_2^2 POL(MATRIXMULTLIST(x_1, x_2)) = [2]x_1 + [2]x_2 + [2]x_1*x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = [2]x_1 + x_2 + [2]x_1*x_2 POL(MATRIXMULTOLD(x_1, x_2)) = [2] + [2]x_1 + x_2 + [2]x_2^2 + x_1*x_2 + [2]x_1^2 POL(MKBASE(x_1)) = 0 POL(MKBASE#1(x_1)) = 0 POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = 0 POL(TRANSACC#1(x_1, x_2)) = 0 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = x_1 + [2]x_1^2 POL(attach(x_1, x_2)) = [2] + [2]x_1 + [2]x_1^2 POL(attach#1(x_1, x_2)) = [1] + x_2 + x_2^2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 + x_3^2 + x_2*x_3 + x_1*x_2 + x_2^2 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 + [2]x_2^2 + [2]x_1*x_2 + [2]x_1^2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 + x_2^2 POL(makeBase(x_1)) = 0 POL(makeBase#1(x_1)) = [1] POL(matrixMult(x_1, x_2)) = x_1 POL(matrixMult'(x_1, x_2)) = x_1 POL(matrixMult'#1(x_1, x_2)) = x_1 POL(mkBase(x_1)) = [2] + [2]x_1 + [2]x_1^2 POL(mkBase#1(x_1)) = [1] POL(mult(x_1, x_2)) = 0 POL(mult#1(x_1, x_2)) = [1] + x_2 + x_2^2 + x_1*x_2 + x_1^2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 + x_3^2 + x_2*x_3 + x_1*x_3 + x_1^2 + x_1*x_2 + x_2^2 POL(nil) = 0 POL(split(x_1)) = 0 POL(split#1(x_1)) = [1] + x_1 + x_1^2 POL(split#2(x_1, x_2)) = [1] + x_1 + x_2 + x_2^2 + x_1*x_2 + x_1^2 POL(split#3(x_1, x_2, x_3)) = [1] + x_2 + x_3 + x_3^2 + x_2*x_3 + x_2^2 POL(transAcc(x_1, x_2)) = 0 POL(transAcc#1(x_1, x_2)) = [1] + x_2 + x_2^2 POL(transpose(x_1)) = 0 POL(transpose#1(x_1, x_2)) = [1] + x_1 + x_2 + x_2^2 + x_1*x_2 + x_1^2 POL(transpose#2(x_1)) = [1] POL(transpose#3(x_1, x_2)) = [1] + x_1 + x_2 + x_2^2 + x_1*x_2 + x_1^2 POL(tuple#2(x_1, x_2)) = 0 ---------------------------------------- (308) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (309) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) ---------------------------------------- (310) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MATRIXMULTLIST#1_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c73_2, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1 ---------------------------------------- (311) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) by MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) ---------------------------------------- (312) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, MULT#2_3, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c83_2, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2 ---------------------------------------- (313) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(z0, z1), z2, z3) -> c83(+'(*(z2, z0), mult(z3, z1)), MULT(z3, z1)) by MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) ---------------------------------------- (314) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSACC#1_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c92_2, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2 ---------------------------------------- (315) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) by TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) ---------------------------------------- (316) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#1_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c95_2, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2 ---------------------------------------- (317) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TRANSPOSE#1(::(z0, z1), z2) -> c95(TRANSPOSE#2(split(z2)), SPLIT(z2)) by TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) ---------------------------------------- (318) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (319) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) by MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) ---------------------------------------- (320) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (321) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) by MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) ---------------------------------------- (322) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULT3_3, MATRIXMULTOLD_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (323) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) by MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) ---------------------------------------- (324) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, matrixMult_2, matrixMult'_2, transAcc_2, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2, mult_2, mult#1_2, mult#2_3, +_2, *_2, #mult_2, #pred_1, #abs_1, split_1, split#1_1, split#2_2, split#3_3, transpose_1, transpose#1_2, transpose#2_1, transpose#3_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULTOLD_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (325) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) ---------------------------------------- (326) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MATRIXMULTOLD_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (327) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) by MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) ---------------------------------------- (328) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (329) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) by MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) ---------------------------------------- (330) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (331) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) by TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) ---------------------------------------- (332) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, MATRIXMULTLIST#1_2, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c73_2, c83_2, c92_2, c95_2 ---------------------------------------- (333) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULTLIST#1(::(z1, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'(z0, transAcc(z1, makeBase(z1))), x1), MATRIXMULT(z0, z1)) by MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) ---------------------------------------- (334) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c83_2, c92_2, c95_2, c73_2 ---------------------------------------- (335) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(x0, z1), x2, z0) -> c83(+'(*(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) by MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) ---------------------------------------- (336) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c83_2, c92_2, c95_2, c73_2 ---------------------------------------- (337) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(x0, z1), x2, z0) -> c83(+'(#mult(x2, x0), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) ---------------------------------------- (338) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c95_2, c73_2, c83_2 ---------------------------------------- (339) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) We considered the (Usable) Rules: attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transAcc(z0, z1) -> transAcc#1(z0, z1) attach(z0, z1) -> attach#1(z0, z1) mkBase(z0) -> mkBase#1(z0) split(z0) -> split#1(z0) attach#1(nil, z0) -> nil makeBase(z0) -> makeBase#1(z0) transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) mkBase#1(nil) -> nil attach#2(nil, z0, z1) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(nil, z0) -> tuple#2(nil, nil) split#1(::(z0, z1)) -> split#2(z0, z1) transAcc#1(nil, z0) -> z0 makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose#1(nil, z0) -> nil And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = x_2 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = 0 POL(#neg(x_1)) = [1] POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = x_2 POL(+(x_1, x_2)) = [1] + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = x_1 + x_2 POL(ATTACH(x_1, x_2)) = x_1 POL(ATTACH#1(x_1, x_2)) = x_1 POL(ATTACH#2(x_1, x_2, x_3)) = x_2 + x_3 POL(LINEMULT(x_1, x_2)) = x_2 POL(LINEMULT#1(x_1, x_2)) = x_1 POL(MAKEBASE(x_1)) = x_1 POL(MAKEBASE#1(x_1)) = x_1 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT'(x_1, x_2)) = x_2 POL(MATRIXMULT'#1(x_1, x_2)) = x_2 POL(MATRIXMULT3(x_1, x_2, x_3)) = x_3 POL(MATRIXMULTLIST(x_1, x_2)) = x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = x_1 POL(MATRIXMULTOLD(x_1, x_2)) = x_2 POL(MKBASE(x_1)) = x_1 POL(MKBASE#1(x_1)) = x_1 POL(MULT(x_1, x_2)) = x_2 POL(MULT#1(x_1, x_2)) = x_2 POL(MULT#2(x_1, x_2, x_3)) = x_1 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = x_1 + x_2 POL(TRANSACC#1(x_1, x_2)) = x_1 + x_2 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = x_1 POL(attach(x_1, x_2)) = x_1 + x_2 POL(attach#1(x_1, x_2)) = x_1 + x_2 POL(attach#2(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = 0 POL(makeBase#1(x_1)) = 0 POL(matrixMult'(x_1, x_2)) = x_1 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 POL(mkBase(x_1)) = 0 POL(mkBase#1(x_1)) = 0 POL(mult(x_1, x_2)) = x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = x_1 POL(split#1(x_1)) = x_1 POL(split#2(x_1, x_2)) = x_1 + x_2 POL(split#3(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 + x_2 POL(transAcc#1(x_1, x_2)) = x_1 + x_2 POL(transpose(x_1)) = x_1 POL(transpose#1(x_1, x_2)) = x_2 POL(transpose#2(x_1)) = x_1 POL(transpose#3(x_1, x_2)) = x_1 + x_2 POL(tuple#2(x_1, x_2)) = x_1 + x_2 ---------------------------------------- (340) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c95_2, c73_2, c83_2 ---------------------------------------- (341) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) We considered the (Usable) Rules: attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transAcc(z0, z1) -> transAcc#1(z0, z1) attach(z0, z1) -> attach#1(z0, z1) mkBase(z0) -> mkBase#1(z0) split(z0) -> split#1(z0) attach#1(nil, z0) -> nil makeBase(z0) -> makeBase#1(z0) transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) mkBase#1(nil) -> nil attach#2(nil, z0, z1) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(nil, z0) -> tuple#2(nil, nil) split#1(::(z0, z1)) -> split#2(z0, z1) transAcc#1(nil, z0) -> z0 makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose#1(nil, z0) -> nil And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = [1] POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = x_2 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = x_2 POL(+(x_1, x_2)) = [1] + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = x_1 + x_2 POL(ATTACH(x_1, x_2)) = x_1 POL(ATTACH#1(x_1, x_2)) = x_1 POL(ATTACH#2(x_1, x_2, x_3)) = x_2 + x_3 POL(LINEMULT(x_1, x_2)) = x_2 POL(LINEMULT#1(x_1, x_2)) = x_1 POL(MAKEBASE(x_1)) = x_1 POL(MAKEBASE#1(x_1)) = x_1 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT'(x_1, x_2)) = x_2 POL(MATRIXMULT'#1(x_1, x_2)) = x_2 POL(MATRIXMULT3(x_1, x_2, x_3)) = x_1 + x_3 POL(MATRIXMULTLIST(x_1, x_2)) = x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = x_1 POL(MATRIXMULTOLD(x_1, x_2)) = x_2 POL(MKBASE(x_1)) = x_1 POL(MKBASE#1(x_1)) = x_1 POL(MULT(x_1, x_2)) = x_2 POL(MULT#1(x_1, x_2)) = x_2 POL(MULT#2(x_1, x_2, x_3)) = x_1 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = x_1 + x_2 POL(TRANSACC#1(x_1, x_2)) = x_1 + x_2 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = x_1 POL(attach(x_1, x_2)) = x_1 + x_2 POL(attach#1(x_1, x_2)) = x_1 + x_2 POL(attach#2(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = 0 POL(makeBase#1(x_1)) = 0 POL(matrixMult'(x_1, x_2)) = x_1 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 POL(mkBase(x_1)) = 0 POL(mkBase#1(x_1)) = 0 POL(mult(x_1, x_2)) = x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = x_1 POL(split#1(x_1)) = x_1 POL(split#2(x_1, x_2)) = x_1 + x_2 POL(split#3(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 + x_2 POL(transAcc#1(x_1, x_2)) = x_1 + x_2 POL(transpose(x_1)) = x_1 POL(transpose#1(x_1, x_2)) = x_2 POL(transpose#2(x_1)) = x_1 POL(transpose#3(x_1, x_2)) = x_1 + x_2 POL(tuple#2(x_1, x_2)) = x_1 + x_2 ---------------------------------------- (342) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c95_2, c73_2, c83_2 ---------------------------------------- (343) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) We considered the (Usable) Rules: attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose(z0) -> transpose#1(z0, z0) transAcc(z0, z1) -> transAcc#1(z0, z1) attach(z0, z1) -> attach#1(z0, z1) mkBase(z0) -> mkBase#1(z0) split(z0) -> split#1(z0) attach#1(nil, z0) -> nil makeBase(z0) -> makeBase#1(z0) transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) mkBase#1(nil) -> nil attach#2(nil, z0, z1) -> nil transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(nil, z0) -> tuple#2(nil, nil) split#1(::(z0, z1)) -> split#2(z0, z1) transAcc#1(nil, z0) -> z0 makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil transpose#1(nil, z0) -> nil And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = x_2 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = [1] POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = x_2 POL(+(x_1, x_2)) = [1] + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = x_1 + x_2 POL(ATTACH(x_1, x_2)) = x_1 POL(ATTACH#1(x_1, x_2)) = x_1 POL(ATTACH#2(x_1, x_2, x_3)) = x_2 + x_3 POL(LINEMULT(x_1, x_2)) = x_2 POL(LINEMULT#1(x_1, x_2)) = x_1 POL(MAKEBASE(x_1)) = x_1 POL(MAKEBASE#1(x_1)) = x_1 POL(MATRIXMULT(x_1, x_2)) = x_2 POL(MATRIXMULT'(x_1, x_2)) = x_2 POL(MATRIXMULT'#1(x_1, x_2)) = x_2 POL(MATRIXMULT3(x_1, x_2, x_3)) = x_3 POL(MATRIXMULTLIST(x_1, x_2)) = x_2 POL(MATRIXMULTLIST#1(x_1, x_2)) = x_1 POL(MATRIXMULTOLD(x_1, x_2)) = x_2 POL(MKBASE(x_1)) = x_1 POL(MKBASE#1(x_1)) = x_1 POL(MULT(x_1, x_2)) = x_2 POL(MULT#1(x_1, x_2)) = x_2 POL(MULT#2(x_1, x_2, x_3)) = x_1 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = x_1 + x_2 POL(TRANSACC#1(x_1, x_2)) = x_1 + x_2 POL(TRANSPOSE(x_1)) = 0 POL(TRANSPOSE#1(x_1, x_2)) = 0 POL(TRANSPOSE#2(x_1)) = 0 POL(TRANSPOSE#3(x_1, x_2)) = 0 POL(TRANSPOSE'(x_1)) = x_1 POL(attach(x_1, x_2)) = x_1 + x_2 POL(attach#1(x_1, x_2)) = x_1 + x_2 POL(attach#2(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = 0 POL(makeBase#1(x_1)) = 0 POL(matrixMult'(x_1, x_2)) = x_1 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 POL(mkBase(x_1)) = 0 POL(mkBase#1(x_1)) = 0 POL(mult(x_1, x_2)) = [1] + x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = x_1 POL(split#1(x_1)) = x_1 POL(split#2(x_1, x_2)) = x_1 + x_2 POL(split#3(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 + x_2 POL(transAcc#1(x_1, x_2)) = x_1 + x_2 POL(transpose(x_1)) = x_1 POL(transpose#1(x_1, x_2)) = x_2 POL(transpose#2(x_1)) = x_1 POL(transpose#3(x_1, x_2)) = x_1 + x_2 POL(tuple#2(x_1, x_2)) = x_1 + x_2 ---------------------------------------- (344) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c95_2, c73_2, c83_2 ---------------------------------------- (345) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TRANSPOSE#1(::(x0, x1), z0) -> c95(TRANSPOSE#2(split#1(z0)), SPLIT(z0)) by TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), nil) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(nil)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) ---------------------------------------- (346) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), nil) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(nil)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), nil) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(nil)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) K tuples: MATRIXMULT3(z0, z1, z2) -> c(MATRIXMULT(matrixMult(z0, z1), z2)) MATRIXMULTOLD(z0, z1) -> c(MATRIXMULT'(z0, transpose(z1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase(z0))) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT(z0, z1) -> c(MATRIXMULT'(z0, transAcc(z1, makeBase(z1)))) MATRIXMULTLIST#1(::(z0, z1), z2) -> c73(MATRIXMULTLIST(matrixMult(z2, z0), z1), MATRIXMULT(z2, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(TRANSACC(z1, makeBase(z1))) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC#1(::(z0, z1), z2) -> c92(ATTACH(z0, transAcc(z1, z2)), TRANSACC(z1, z2)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(+'(*(z2, z0), mult(z3, z1))) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (347) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: TRANSPOSE#1(::(x0, x1), nil) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(nil)) ---------------------------------------- (348) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (349) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) We considered the (Usable) Rules:none And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = 0 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = 0 POL(MAKEBASE#1(x_1)) = 0 POL(MATRIXMULT(x_1, x_2)) = 0 POL(MATRIXMULT'(x_1, x_2)) = 0 POL(MATRIXMULT'#1(x_1, x_2)) = 0 POL(MATRIXMULT3(x_1, x_2, x_3)) = 0 POL(MATRIXMULTLIST(x_1, x_2)) = 0 POL(MATRIXMULTLIST#1(x_1, x_2)) = 0 POL(MATRIXMULTOLD(x_1, x_2)) = 0 POL(MKBASE(x_1)) = 0 POL(MKBASE#1(x_1)) = 0 POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = 0 POL(TRANSACC#1(x_1, x_2)) = 0 POL(TRANSPOSE(x_1)) = [1] POL(TRANSPOSE#1(x_1, x_2)) = [1] POL(TRANSPOSE#2(x_1)) = [1] POL(TRANSPOSE#3(x_1, x_2)) = [1] POL(TRANSPOSE'(x_1)) = 0 POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = x_1 POL(makeBase#1(x_1)) = 0 POL(matrixMult'(x_1, x_2)) = x_1 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = [1] + x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = [1] + x_1 POL(split#1(x_1)) = [1] POL(split#2(x_1, x_2)) = [1] + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 POL(transAcc#1(x_1, x_2)) = 0 POL(transpose(x_1)) = [1] + x_1 POL(transpose#1(x_1, x_2)) = [1] + x_1 POL(transpose#2(x_1)) = [1] + x_1 POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = 0 ---------------------------------------- (350) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (351) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) We considered the (Usable) Rules: split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(nil, z0) -> tuple#2(nil, nil) split#1(::(z0, z1)) -> split#2(z0, z1) split(z0) -> split#1(z0) And the Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(#0) = 0 POL(#ADD(x_1, x_2)) = 0 POL(#MULT(x_1, x_2)) = 0 POL(#NATMULT(x_1, x_2)) = 0 POL(#abs(x_1)) = [1] + x_1 POL(#add(x_1, x_2)) = [1] POL(#mult(x_1, x_2)) = [1] POL(#natmult(x_1, x_2)) = x_2 POL(#neg(x_1)) = 0 POL(#pos(x_1)) = 0 POL(#pred(x_1)) = [1] POL(#s(x_1)) = 0 POL(#succ(x_1)) = [1] POL(*(x_1, x_2)) = [1] + x_1 + x_2 POL(*'(x_1, x_2)) = 0 POL(+(x_1, x_2)) = [1] + x_2 POL(+'(x_1, x_2)) = 0 POL(::(x_1, x_2)) = [1] + x_1 + x_2 POL(ATTACH(x_1, x_2)) = 0 POL(ATTACH#1(x_1, x_2)) = 0 POL(ATTACH#2(x_1, x_2, x_3)) = 0 POL(LINEMULT(x_1, x_2)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 POL(MAKEBASE(x_1)) = 0 POL(MAKEBASE#1(x_1)) = 0 POL(MATRIXMULT(x_1, x_2)) = 0 POL(MATRIXMULT'(x_1, x_2)) = 0 POL(MATRIXMULT'#1(x_1, x_2)) = 0 POL(MATRIXMULT3(x_1, x_2, x_3)) = 0 POL(MATRIXMULTLIST(x_1, x_2)) = 0 POL(MATRIXMULTLIST#1(x_1, x_2)) = 0 POL(MATRIXMULTOLD(x_1, x_2)) = 0 POL(MKBASE(x_1)) = 0 POL(MKBASE#1(x_1)) = 0 POL(MULT(x_1, x_2)) = 0 POL(MULT#1(x_1, x_2)) = 0 POL(MULT#2(x_1, x_2, x_3)) = 0 POL(SPLIT(x_1)) = 0 POL(SPLIT#1(x_1)) = 0 POL(SPLIT#2(x_1, x_2)) = 0 POL(TRANSACC(x_1, x_2)) = 0 POL(TRANSACC#1(x_1, x_2)) = 0 POL(TRANSPOSE(x_1)) = x_1 POL(TRANSPOSE#1(x_1, x_2)) = x_2 POL(TRANSPOSE#2(x_1)) = x_1 POL(TRANSPOSE#3(x_1, x_2)) = x_1 POL(TRANSPOSE'(x_1)) = 0 POL(attach(x_1, x_2)) = [1] + x_1 + x_2 POL(attach#1(x_1, x_2)) = [1] + x_2 POL(attach#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(c(x_1)) = x_1 POL(c10(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c2(x_1)) = x_1 POL(c28(x_1)) = x_1 POL(c29(x_1)) = x_1 POL(c30(x_1)) = x_1 POL(c31(x_1)) = x_1 POL(c33(x_1)) = x_1 POL(c35(x_1)) = x_1 POL(c36(x_1)) = x_1 POL(c37(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(c63(x_1)) = x_1 POL(c64(x_1)) = x_1 POL(c67(x_1)) = x_1 POL(c68(x_1)) = x_1 POL(c69(x_1)) = x_1 POL(c72(x_1)) = x_1 POL(c73(x_1, x_2)) = x_1 + x_2 POL(c76(x_1)) = x_1 POL(c77(x_1)) = x_1 POL(c79(x_1)) = x_1 POL(c80(x_1)) = x_1 POL(c83(x_1, x_2)) = x_1 + x_2 POL(c85(x_1)) = x_1 POL(c86(x_1)) = x_1 POL(c88(x_1)) = x_1 POL(c9(x_1)) = x_1 POL(c91(x_1)) = x_1 POL(c92(x_1, x_2)) = x_1 + x_2 POL(c94(x_1)) = x_1 POL(c95(x_1)) = x_1 POL(c95(x_1, x_2)) = x_1 + x_2 POL(c97(x_1)) = x_1 POL(c98(x_1)) = x_1 POL(lineMult(x_1, x_2)) = [1] + x_1 + x_2 POL(lineMult#1(x_1, x_2)) = [1] + x_2 POL(makeBase(x_1)) = x_1 POL(makeBase#1(x_1)) = 0 POL(matrixMult'(x_1, x_2)) = x_1 POL(matrixMult'#1(x_1, x_2)) = [1] + x_1 POL(mkBase(x_1)) = [1] + x_1 POL(mkBase#1(x_1)) = [1] + x_1 POL(mult(x_1, x_2)) = [1] + x_1 + x_2 POL(mult#1(x_1, x_2)) = [1] + x_2 POL(mult#2(x_1, x_2, x_3)) = [1] + x_2 + x_3 POL(nil) = 0 POL(split(x_1)) = x_1 POL(split#1(x_1)) = x_1 POL(split#2(x_1, x_2)) = x_1 + x_2 POL(split#3(x_1, x_2, x_3)) = [1] + x_1 + x_2 + x_3 POL(transAcc(x_1, x_2)) = x_1 POL(transAcc#1(x_1, x_2)) = 0 POL(transpose(x_1)) = [1] + x_1 POL(transpose#1(x_1, x_2)) = [1] + x_1 POL(transpose#2(x_1)) = [1] + x_1 POL(transpose#3(x_1, x_2)) = [1] + x_2 POL(tuple#2(x_1, x_2)) = x_2 ---------------------------------------- (352) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (353) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) ---------------------------------------- (354) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (355) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase(z0)))) by MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) ---------------------------------------- (356) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (357) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc(z0, makeBase#1(z0)))) by MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) ---------------------------------------- (358) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULT3_3, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (359) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT3(z0, z1, x2) -> c(MATRIXMULT(matrixMult'(z0, transAcc(z1, makeBase(z1))), x2)) by MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) ---------------------------------------- (360) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (361) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(x0, z1), x2, z0) -> c(+'(*(x2, x0), mult#1(z0, z1))) by MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) ---------------------------------------- (362) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (363) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult(x3, x1))) by MULT#2(::(x0, z1), x2, z0) -> c(+'(#mult(x2, x0), mult#1(z0, z1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) ---------------------------------------- (364) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (365) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) by MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) ---------------------------------------- (366) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (367) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) by MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc#1(x0, makeBase(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) ---------------------------------------- (368) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, MATRIXMULTLIST#1_2, TRANSPOSE#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c73_2, c83_2, c95_2, c95_1 ---------------------------------------- (369) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) by MATRIXMULTLIST#1(::(x0, x1), z0) -> c73(MATRIXMULTLIST(matrixMult'#1(z0, transAcc(x0, makeBase#1(x0))), x1), MATRIXMULT(z0, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) ---------------------------------------- (370) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1 ---------------------------------------- (371) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), mult#2(z2, z0, z1)), MULT(::(z0, z1), z2)) by MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) ---------------------------------------- (372) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (373) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(x0, z0), x2, nil) -> c83(+'(*(x2, x0), #abs(#0)), MULT(nil, z0)) by MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) ---------------------------------------- (374) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (375) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) ---------------------------------------- (376) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (377) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) ---------------------------------------- (378) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (379) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) ---------------------------------------- (380) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (381) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) ---------------------------------------- (382) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (383) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) ---------------------------------------- (384) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (385) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) ---------------------------------------- (386) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (387) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) ---------------------------------------- (388) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (389) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) ---------------------------------------- (390) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (391) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) by MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) ---------------------------------------- (392) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_2, c95_1, c73_2, c73_1, c83_1 ---------------------------------------- (393) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) by TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) ---------------------------------------- (394) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (395) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1)))))) by MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) ---------------------------------------- (396) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (397) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase(nil))) by MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) ---------------------------------------- (398) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (399) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(x0, ::(z0, z1)) -> c(MATRIXMULT'(x0, transAcc(::(z0, z1), mkBase(z0)))) by MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) ---------------------------------------- (400) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (401) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc(nil, nil))) by MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) ---------------------------------------- (402) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (403) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase(x1))), x2)) by MATRIXMULT3(::(z0, z1), x1, x2) -> c(MATRIXMULT(::(lineMult(z0, transAcc(x1, makeBase(x1))), matrixMult'(z1, transAcc(x1, makeBase(x1)))), x2)) MATRIXMULT3(nil, x1, x2) -> c(MATRIXMULT(nil, x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc(z0, makeBase#1(z0))), x2)) ---------------------------------------- (404) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) MATRIXMULT3(::(z0, z1), x1, x2) -> c(MATRIXMULT(::(lineMult(z0, transAcc(x1, makeBase(x1))), matrixMult'(z1, transAcc(x1, makeBase(x1)))), x2)) MATRIXMULT3(nil, x1, x2) -> c(MATRIXMULT(nil, x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc(z0, makeBase#1(z0))), x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MULT#2(::(#neg(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #neg(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, x1), #pos(z0), x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z0), x1), #0, x3) -> c83(+'(#0, mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c83(+'(#neg(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c83(+'(#pos(#natmult(z0, z1)), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#1(::(x0, x1), ::(z0, z1)) -> c95(TRANSPOSE#2(split#2(z0, z1)), SPLIT(::(z0, z1))) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (405) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: MATRIXMULT3(nil, x1, x2) -> c(MATRIXMULT(nil, x2)) ---------------------------------------- (406) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) MATRIXMULT3(::(z0, z1), x1, x2) -> c(MATRIXMULT(::(lineMult(z0, transAcc(x1, makeBase(x1))), matrixMult'(z1, transAcc(x1, makeBase(x1)))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc(z0, makeBase#1(z0))), x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (407) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase(z0))), x2)) by MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc#1(x1, makeBase(x1))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, makeBase(nil)), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase#1(z0))), x2)) ---------------------------------------- (408) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) MATRIXMULT3(::(z0, z1), x1, x2) -> c(MATRIXMULT(::(lineMult(z0, transAcc(x1, makeBase(x1))), matrixMult'(z1, transAcc(x1, makeBase(x1)))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, makeBase(nil)), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase#1(z0))), x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULT3_3, MATRIXMULTLIST#1_2 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (409) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(z0, makeBase#1(z0))), x2)) by MATRIXMULT3(z0, x1, x2) -> c(MATRIXMULT(matrixMult'#1(z0, transAcc(x1, makeBase#1(x1))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(::(z0, z1), mkBase(z0))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(nil, nil)), x2)) ---------------------------------------- (410) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) MATRIXMULT3(::(z0, z1), x1, x2) -> c(MATRIXMULT(::(lineMult(z0, transAcc(x1, makeBase(x1))), matrixMult'(z1, transAcc(x1, makeBase(x1)))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, makeBase(nil)), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(::(z0, z1), mkBase(z0))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(nil, nil)), x2)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULTLIST#1_2, MATRIXMULT3_3 Compound Symbols: c9_1, c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2 ---------------------------------------- (411) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace #MULT(#neg(z0), #neg(z1)) -> c9(#NATMULT(z0, z1)) by #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) ---------------------------------------- (412) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) MATRIXMULT3(::(z0, z1), x1, x2) -> c(MATRIXMULT(::(lineMult(z0, transAcc(x1, makeBase(x1))), matrixMult'(z1, transAcc(x1, makeBase(x1)))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, makeBase(nil)), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(::(z0, z1), mkBase(z0))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(nil, nil)), x2)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE_1, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULTLIST#1_2, MATRIXMULT3_3 Compound Symbols: c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c94_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2, c9_1 ---------------------------------------- (413) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace TRANSPOSE(z0) -> c94(TRANSPOSE#1(z0, z0)) by TRANSPOSE(::(x0, x1)) -> c94(TRANSPOSE#1(::(x0, x1), ::(x0, x1))) ---------------------------------------- (414) Obligation: Complexity Dependency Tuples Problem Rules: #natmult(#0, z0) -> #0 #natmult(#s(z0), z1) -> #add(#pos(z1), #natmult(z0, z1)) #add(#pos(#s(#0)), z0) -> #succ(z0) #add(#pos(#s(#s(z0))), z1) -> #succ(#add(#pos(#s(z0)), z1)) #add(#0, z0) -> z0 #add(#neg(#s(#0)), z0) -> #pred(z0) #add(#neg(#s(#s(z0))), z1) -> #pred(#add(#pos(#s(z0)), z1)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(z0)))) -> #neg(#s(z0)) #succ(#pos(#s(z0))) -> #pos(#s(#s(z0))) transpose(z0) -> transpose#1(z0, z0) transpose#1(::(z0, z1), z2) -> transpose#2(split(z2)) transpose#1(nil, z0) -> nil transpose#2(tuple#2(z0, z1)) -> transpose#3(z1, z0) split(z0) -> split#1(z0) split#1(::(z0, z1)) -> split#2(z0, z1) split#1(nil) -> tuple#2(nil, nil) split#2(::(z0, z1), z2) -> split#3(split(z2), z0, z1) split#2(nil, z0) -> tuple#2(nil, nil) split#3(tuple#2(z0, z1), z2, z3) -> tuple#2(::(z2, z0), ::(z3, z1)) transpose#3(::(z0, z1), z2) -> ::(z2, transpose(::(z0, z1))) transpose#3(nil, z0) -> nil *(z0, z1) -> #mult(z0, z1) #mult(#0, #0) -> #0 #mult(#0, #neg(z0)) -> #0 #mult(#0, #pos(z0)) -> #0 #mult(#neg(z0), #0) -> #0 #mult(#neg(z0), #neg(z1)) -> #pos(#natmult(z0, z1)) #mult(#neg(z0), #pos(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #0) -> #0 #mult(#pos(z0), #neg(z1)) -> #neg(#natmult(z0, z1)) #mult(#pos(z0), #pos(z1)) -> #pos(#natmult(z0, z1)) mult(z0, z1) -> mult#1(z0, z1) mult#1(::(z0, z1), z2) -> mult#2(z2, z0, z1) mult#1(nil, z0) -> #abs(#0) mult#2(::(z0, z1), z2, z3) -> +(*(z2, z0), mult(z3, z1)) mult#2(nil, z0, z1) -> #abs(#0) +(z0, z1) -> #add(z0, z1) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(z0))) -> #neg(#s(#s(z0))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(z0)))) -> #pos(#s(z0)) #abs(#0) -> #0 makeBase(z0) -> makeBase#1(z0) makeBase#1(::(z0, z1)) -> mkBase(z0) makeBase#1(nil) -> nil mkBase(z0) -> mkBase#1(z0) mkBase#1(::(z0, z1)) -> ::(nil, mkBase(z1)) mkBase#1(nil) -> nil matrixMult'(z0, z1) -> matrixMult'#1(z0, z1) transAcc(z0, z1) -> transAcc#1(z0, z1) transAcc#1(::(z0, z1), z2) -> attach(z0, transAcc(z1, z2)) transAcc#1(nil, z0) -> z0 attach(z0, z1) -> attach#1(z0, z1) attach#1(::(z0, z1), z2) -> attach#2(z2, z0, z1) attach#1(nil, z0) -> nil attach#2(::(z0, z1), z2, z3) -> ::(::(z2, z0), attach(z3, z1)) attach#2(nil, z0, z1) -> nil matrixMult'#1(::(z0, z1), z2) -> ::(lineMult(z0, z2), matrixMult'(z1, z2)) matrixMult'#1(nil, z0) -> nil lineMult(z0, z1) -> lineMult#1(z1, z0) lineMult#1(::(z0, z1), z2) -> ::(mult(z2, z0), lineMult(z2, z1)) lineMult#1(nil, z0) -> nil Tuples: #MULT(#neg(z0), #pos(z1)) -> c10(#NATMULT(z0, z1)) #MULT(#pos(z0), #neg(z1)) -> c12(#NATMULT(z0, z1)) #MULT(#pos(z0), #pos(z1)) -> c13(#NATMULT(z0, z1)) #NATMULT(#s(z0), z1) -> c15(#ADD(#pos(z1), #natmult(z0, z1)), #NATMULT(z0, z1)) *'(z0, z1) -> c28(#MULT(z0, z1)) +'(z0, z1) -> c29(#ADD(z0, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) #ADD(#neg(#s(#s(z0))), z1) -> c2(#ADD(#pos(#s(z0)), z1)) #ADD(#pos(#s(#s(z0))), z1) -> c4(#ADD(#pos(#s(z0)), z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) TRANSACC#1(::(x0, z0), z1) -> c92(ATTACH(x0, transAcc#1(z0, z1)), TRANSACC(z0, z1)) MATRIXMULT(x0, z0) -> c(TRANSACC(z0, makeBase#1(z0))) MATRIXMULTOLD(x0, z0) -> c(MATRIXMULT'(x0, transpose#1(z0, z0))) TRANSPOSE'(z0) -> c(TRANSACC(z0, makeBase#1(z0))) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) MATRIXMULT(x0, z0) -> c(MATRIXMULT'(x0, transAcc#1(z0, makeBase#1(z0)))) MULT#2(::(x0, z2), x2, ::(z0, z1)) -> c(+'(*(x2, x0), mult#2(z2, z0, z1))) MULT#2(::(x0, z0), x2, nil) -> c(+'(*(x2, x0), #abs(#0))) MULT#2(::(z1, x1), z0, x3) -> c(+'(#mult(z0, z1), mult#1(x3, x1))) MULT#2(::(#0, x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#pos(z0), x1), #0, x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#0, x1), #neg(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #neg(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #neg(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#0, x1), #pos(z0), x3) -> c(+'(#0, mult(x3, x1))) MULT#2(::(#neg(z1), x1), #pos(z0), x3) -> c(+'(#neg(#natmult(z0, z1)), mult(x3, x1))) MULT#2(::(#pos(z1), x1), #pos(z0), x3) -> c(+'(#pos(#natmult(z0, z1)), mult(x3, x1))) MATRIXMULTLIST#1(::(x0, x1), ::(z0, z1)) -> c73(MATRIXMULTLIST(::(lineMult(z0, transAcc(x0, makeBase(x0))), matrixMult'(z1, transAcc(x0, makeBase(x0)))), x1), MATRIXMULT(::(z0, z1), x0)) MATRIXMULTLIST#1(::(x0, x1), nil) -> c73(MATRIXMULTLIST(nil, x1), MATRIXMULT(nil, x0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc#1(z0, makeBase(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'#1(x2, transAcc(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, makeBase(nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(z0, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc#1(z0, makeBase#1(z0))), x1), MATRIXMULT(x2, z0)) MATRIXMULTLIST#1(::(::(z0, z1), x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(::(z0, z1), mkBase(z0))), x1), MATRIXMULT(x2, ::(z0, z1))) MATRIXMULTLIST#1(::(nil, x1), x2) -> c73(MATRIXMULTLIST(matrixMult'(x2, transAcc(nil, nil)), x1), MATRIXMULT(x2, nil)) MATRIXMULTLIST#1(::(x0, x1), x2) -> c73(MATRIXMULT(x2, x0)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) MULT#2(::(#0, z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(x0), z1), #0, z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#0, z1), #neg(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #neg(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #neg(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #neg(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #neg(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #neg(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#0, z1), #pos(x1), z0) -> c83(+'(#0, mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(x0), z1), #pos(x2), z0) -> c83(+'(#neg(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#neg(z0), x1), #pos(#0), x3) -> c83(+'(#neg(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#neg(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#neg(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(x0), z1), #pos(x2), z0) -> c83(+'(#pos(#natmult(x2, x0)), mult#1(z0, z1)), MULT(z0, z1)) MULT#2(::(#pos(z0), x1), #pos(#0), x3) -> c83(+'(#pos(#0), mult(x3, x1)), MULT(x3, x1)) MULT#2(::(#pos(z1), x1), #pos(#s(z0)), x3) -> c83(+'(#pos(#add(#pos(z1), #natmult(z0, z1))), mult(x3, x1)), MULT(x3, x1)) TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) TRANSPOSE#1(::(x0, x1), ::(nil, z0)) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(::(nil, z0))) TRANSPOSE#1(::(x0, x1), ::(x2, x3)) -> c95(SPLIT(::(x2, x3))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, attach#1(z0, transAcc(x2, makeBase(::(z0, x2)))))) MATRIXMULT(x0, ::(x1, z0)) -> c(MATRIXMULT'(x0, attach(x1, transAcc#1(z0, makeBase(::(x1, z0)))))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, attach(x1, transAcc(x2, makeBase#1(::(x1, x2)))))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, makeBase#1(nil))) MATRIXMULT(x0, ::(x1, x2)) -> c(MATRIXMULT'(x0, transAcc#1(::(x1, x2), mkBase(x1)))) MATRIXMULT(x0, ::(z0, x2)) -> c(MATRIXMULT'(x0, transAcc(::(z0, x2), mkBase#1(z0)))) MATRIXMULT(x0, nil) -> c(MATRIXMULT'(x0, transAcc#1(nil, nil))) MATRIXMULT3(::(z0, z1), x1, x2) -> c(MATRIXMULT(::(lineMult(z0, transAcc(x1, makeBase(x1))), matrixMult'(z1, transAcc(x1, makeBase(x1)))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc#1(z0, makeBase(z0))), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'#1(x0, transAcc(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, attach(z0, transAcc(z1, makeBase(::(z0, z1))))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, makeBase(nil)), x2)) MATRIXMULT3(x0, z0, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc#1(z0, makeBase#1(z0))), x2)) MATRIXMULT3(x0, ::(z0, z1), x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(::(z0, z1), mkBase(z0))), x2)) MATRIXMULT3(x0, nil, x2) -> c(MATRIXMULT(matrixMult'(x0, transAcc(nil, nil)), x2)) #MULT(#neg(#s(y0)), #neg(z1)) -> c9(#NATMULT(#s(y0), z1)) TRANSPOSE(::(x0, x1)) -> c94(TRANSPOSE#1(::(x0, x1), ::(x0, x1))) S tuples: +'(z0, z1) -> c29(#ADD(z0, z1)) LINEMULT(z0, z1) -> c35(LINEMULT#1(z1, z0)) LINEMULT#1(::(z0, z1), z2) -> c37(LINEMULT(z2, z1)) MULT(z0, z1) -> c79(MULT#1(z0, z1)) MULT#1(::(z0, z1), z2) -> c80(MULT#2(z2, z0, z1)) SPLIT(z0) -> c85(SPLIT#1(z0)) SPLIT#1(::(z0, z1)) -> c86(SPLIT#2(z0, z1)) SPLIT#2(::(z0, z1), z2) -> c88(SPLIT(z2)) MULT#2(::(z1, x1), z0, x3) -> c83(+'(#mult(z0, z1), mult#1(x3, x1)), MULT(x3, x1)) MULT#2(::(x0, ::(z0, z1)), x2, ::(z2, z3)) -> c83(+'(*(x2, x0), +(*(z2, z0), mult(z3, z1))), MULT(::(z2, z3), ::(z0, z1))) MULT#2(::(x0, nil), x2, ::(z0, z1)) -> c83(+'(*(x2, x0), #abs(#0)), MULT(::(z0, z1), nil)) MULT#2(::(z1, x1), z0, ::(x3, x4)) -> c83(+'(#mult(z0, z1), mult#2(x1, x3, x4)), MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, ::(x3, x4)) -> c83(MULT(::(x3, x4), x1)) MULT#2(::(x0, x1), x2, nil) -> c83(+'(*(x2, x0), #0), MULT(nil, x1)) MULT#2(::(z1, x1), z0, nil) -> c83(+'(#mult(z0, z1), #abs(#0)), MULT(nil, x1)) K tuples: MAKEBASE(z0) -> c63(MAKEBASE#1(z0)) MAKEBASE#1(::(z0, z1)) -> c64(MKBASE(z0)) MKBASE(z0) -> c76(MKBASE#1(z0)) MATRIXMULTLIST(z0, z1) -> c72(MATRIXMULTLIST#1(z1, z0)) MKBASE#1(::(z0, z1)) -> c77(MKBASE(z1)) MATRIXMULT(z0, z1) -> c(MAKEBASE(z1)) TRANSACC(z0, z1) -> c91(TRANSACC#1(z0, z1)) MATRIXMULT'#1(::(z0, z1), z2) -> c68(LINEMULT(z0, z2)) ATTACH#2(::(z0, z1), z2, z3) -> c33(ATTACH(z3, z1)) ATTACH(z0, z1) -> c30(ATTACH#1(z0, z1)) ATTACH#1(::(z0, z1), z2) -> c31(ATTACH#2(z2, z0, z1)) LINEMULT#1(::(z0, z1), z2) -> c36(MULT(z2, z0)) *'(z0, z1) -> c28(#MULT(z0, z1)) MULT#2(::(z0, z1), z2, z3) -> c(*'(z2, z0)) MATRIXMULT'#1(::(z0, z1), z2) -> c69(MATRIXMULT'(z1, z2)) MATRIXMULT'(z0, z1) -> c67(MATRIXMULT'#1(z0, z1)) TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) TRANSPOSE#2(tuple#2(z0, z1)) -> c97(TRANSPOSE#3(z1, z0)) TRANSPOSE#3(::(z0, z1), z2) -> c98(TRANSPOSE(::(z0, z1))) TRANSPOSE(::(x0, x1)) -> c94(TRANSPOSE#1(::(x0, x1), ::(x0, x1))) Defined Rule Symbols: #natmult_2, #add_2, #succ_1, transpose_1, transpose#1_2, transpose#2_1, split_1, split#1_1, split#2_2, split#3_3, transpose#3_2, *_2, #mult_2, mult_2, mult#1_2, mult#2_3, +_2, #pred_1, #abs_1, makeBase_1, makeBase#1_1, mkBase_1, mkBase#1_1, matrixMult'_2, transAcc_2, transAcc#1_2, attach_2, attach#1_2, attach#2_3, matrixMult'#1_2, lineMult_2, lineMult#1_2 Defined Pair Symbols: #MULT_2, #NATMULT_2, *'_2, +'_2, ATTACH_2, ATTACH#1_2, ATTACH#2_3, LINEMULT_2, LINEMULT#1_2, MAKEBASE_1, MAKEBASE#1_1, MATRIXMULT'_2, MATRIXMULT'#1_2, MATRIXMULTLIST_2, MKBASE_1, MKBASE#1_1, MULT_2, MULT#1_2, SPLIT_1, SPLIT#1_1, TRANSACC_2, TRANSPOSE#2_1, TRANSPOSE#3_2, #ADD_2, SPLIT#2_2, MATRIXMULT_2, MULT#2_3, TRANSACC#1_2, MATRIXMULTOLD_2, TRANSPOSE'_1, TRANSPOSE#1_2, MATRIXMULTLIST#1_2, MATRIXMULT3_3, TRANSPOSE_1 Compound Symbols: c10_1, c12_1, c13_1, c15_2, c28_1, c29_1, c30_1, c31_1, c33_1, c35_1, c36_1, c37_1, c63_1, c64_1, c67_1, c68_1, c69_1, c72_1, c76_1, c77_1, c79_1, c80_1, c85_1, c86_1, c91_1, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c95_1, c73_2, c73_1, c83_1, c95_2, c9_1, c94_1