KILLED proof of input_NU0hfzZnBG.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), 452 ms] (2) CpxRelTRS (3) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxRelTRS (5) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (6) CpxTRS (7) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (8) CpxWeightedTrs (9) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxWeightedTrs (11) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CpxTypedWeightedTrs (13) CompletionProof [UPPER BOUND(ID), 0 ms] (14) CpxTypedWeightedCompleteTrs (15) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 5 ms] (16) CpxRNTS (17) CompletionProof [UPPER BOUND(ID), 0 ms] (18) CpxTypedWeightedCompleteTrs (19) NarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (20) CpxTypedWeightedCompleteTrs (21) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 6 ms] (22) CpxRNTS (23) InliningProof [UPPER BOUND(ID), 1645 ms] (24) CpxRNTS (25) SimplificationProof [BOTH BOUNDS(ID, ID), 21 ms] (26) CpxRNTS (27) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 10 ms] (28) CpxRNTS (29) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (30) CpxRNTS (31) IntTrsBoundProof [UPPER BOUND(ID), 147 ms] (32) CpxRNTS (33) IntTrsBoundProof [UPPER BOUND(ID), 47 ms] (34) CpxRNTS (35) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (36) CpxRNTS (37) IntTrsBoundProof [UPPER BOUND(ID), 114 ms] (38) CpxRNTS (39) IntTrsBoundProof [UPPER BOUND(ID), 35 ms] (40) CpxRNTS (41) ResultPropagationProof [UPPER BOUND(ID), 2 ms] (42) CpxRNTS (43) IntTrsBoundProof [UPPER BOUND(ID), 1338 ms] (44) CpxRNTS (45) IntTrsBoundProof [UPPER BOUND(ID), 341 ms] (46) CpxRNTS (47) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 239 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 12 ms] (52) CpxRNTS (53) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 272 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (58) CpxRNTS (59) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 372 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 109 ms] (64) CpxRNTS (65) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 769 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 272 ms] (70) CpxRNTS (71) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 2086 ms] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 349 ms] (76) CpxRNTS (77) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (78) CpxRNTS (79) IntTrsBoundProof [UPPER BOUND(ID), 261 ms] (80) CpxRNTS (81) IntTrsBoundProof [UPPER BOUND(ID), 165 ms] (82) CpxRNTS (83) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (84) CpxRNTS (85) IntTrsBoundProof [UPPER BOUND(ID), 70 ms] (86) CpxRNTS (87) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] (88) CpxRNTS (89) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (90) CpxRNTS (91) IntTrsBoundProof [UPPER BOUND(ID), 113 ms] (92) CpxRNTS (93) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] (94) CpxRNTS (95) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (96) CpxRNTS (97) IntTrsBoundProof [UPPER BOUND(ID), 190 ms] (98) CpxRNTS (99) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (100) CpxRNTS (101) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (102) CpxRNTS (103) IntTrsBoundProof [UPPER BOUND(ID), 98 ms] (104) CpxRNTS (105) IntTrsBoundProof [UPPER BOUND(ID), 42 ms] (106) CpxRNTS (107) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (108) CpxRNTS (109) IntTrsBoundProof [UPPER BOUND(ID), 190 ms] (110) CpxRNTS (111) IntTrsBoundProof [UPPER BOUND(ID), 64 ms] (112) CpxRNTS (113) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (114) CpxRNTS (115) IntTrsBoundProof [UPPER BOUND(ID), 3766 ms] (116) CpxRNTS (117) IntTrsBoundProof [UPPER BOUND(ID), 586 ms] (118) CpxRNTS (119) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (120) CdtProblem (121) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (122) CdtProblem (123) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (124) CdtProblem (125) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (126) CdtProblem (127) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (128) CdtProblem (129) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (130) CdtProblem (131) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (132) CdtProblem (133) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 373 ms] (134) CdtProblem (135) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 170 ms] (136) CdtProblem (137) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (138) CdtProblem (139) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 189 ms] (140) CdtProblem (141) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (142) CdtProblem (143) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 185 ms] (144) CdtProblem (145) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 160 ms] (146) CdtProblem (147) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (148) CdtProblem (149) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 151 ms] (150) CdtProblem (151) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 124 ms] (152) CdtProblem (153) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 120 ms] (154) CdtProblem (155) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 1638 ms] (156) CdtProblem (157) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (158) CdtProblem (159) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (160) CdtProblem (161) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (162) CdtProblem (163) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (164) CdtProblem (165) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (166) CdtProblem (167) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (168) CdtProblem (169) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (170) CdtProblem (171) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (172) CdtProblem (173) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (174) CdtProblem (175) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (176) CdtProblem (177) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 4 ms] (178) CdtProblem (179) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (180) CdtProblem (181) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (182) CdtProblem (183) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 2 ms] (184) CdtProblem (185) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (186) CdtProblem (187) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 237 ms] (188) CdtProblem (189) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 256 ms] (190) CdtProblem (191) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 231 ms] (192) CdtProblem (193) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (194) CdtProblem (195) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (196) CdtProblem (197) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 225 ms] (198) CdtProblem (199) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 217 ms] (200) CdtProblem (201) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (202) CdtProblem (203) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (204) CdtProblem (205) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (206) CdtProblem (207) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (208) CdtProblem (209) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (210) CdtProblem (211) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (212) CdtProblem (213) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (214) CdtProblem (215) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 1 ms] (216) CdtProblem (217) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (218) CdtProblem (219) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (220) CdtProblem (221) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (222) CdtProblem (223) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (224) CdtProblem (225) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (226) CdtProblem (227) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (228) CdtProblem (229) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (230) CdtProblem (231) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (232) CdtProblem (233) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (234) CdtProblem (235) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (236) CdtProblem (237) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (238) CdtProblem (239) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (240) CdtProblem (241) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (242) CdtProblem (243) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (244) CdtProblem (245) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (246) CdtProblem (247) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (248) CdtProblem (249) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (250) CdtProblem (251) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (252) CdtProblem (253) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (254) CdtProblem (255) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (256) CdtProblem (257) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (258) CdtProblem (259) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (260) CdtProblem (261) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (262) CdtProblem (263) CdtInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (264) 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) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (8) 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 ---------------------------------------- (9) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) Renamed defined symbols to avoid conflicts with arithmetic symbols: * => times + => plus ---------------------------------------- (10) 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 ---------------------------------------- (11) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (12) 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 ---------------------------------------- (13) 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 ---------------------------------------- (14) 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 ---------------------------------------- (15) 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 ---------------------------------------- (16) 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. ---------------------------------------- (17) 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 ---------------------------------------- (18) 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 ---------------------------------------- (19) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (20) 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 ---------------------------------------- (21) 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 ---------------------------------------- (22) 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 ---------------------------------------- (23) 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 ---------------------------------------- (24) 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 ---------------------------------------- (25) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (26) 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 ---------------------------------------- (27) 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 } ---------------------------------------- (28) 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} ---------------------------------------- (29) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (30) 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} ---------------------------------------- (31) 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'' ---------------------------------------- (32) 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''] ---------------------------------------- (33) 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 ---------------------------------------- (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 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''] ---------------------------------------- (35) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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: {#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''] ---------------------------------------- (37) 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 ---------------------------------------- (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: {#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] ---------------------------------------- (39) 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 ---------------------------------------- (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: {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] ---------------------------------------- (41) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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 }-> 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] ---------------------------------------- (43) 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' ---------------------------------------- (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 }-> 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'] ---------------------------------------- (45) 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 ---------------------------------------- (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 }-> 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'] ---------------------------------------- (47) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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 }-> 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'] ---------------------------------------- (49) 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 ---------------------------------------- (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') -{ 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] ---------------------------------------- (51) 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 ---------------------------------------- (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') -{ 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] ---------------------------------------- (53) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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') -{ 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] ---------------------------------------- (55) 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 ---------------------------------------- (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) -{ 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] ---------------------------------------- (57) 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 ---------------------------------------- (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) -{ 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] ---------------------------------------- (59) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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) -{ 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] ---------------------------------------- (61) 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 ---------------------------------------- (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: {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] ---------------------------------------- (63) 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 ---------------------------------------- (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: {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] ---------------------------------------- (65) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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) -{ 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] ---------------------------------------- (67) 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 ---------------------------------------- (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) -{ 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] ---------------------------------------- (69) 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 ---------------------------------------- (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) -{ 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] ---------------------------------------- (71) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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) -{ 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] ---------------------------------------- (73) 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' ---------------------------------------- (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) -{ 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'] ---------------------------------------- (75) 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 ---------------------------------------- (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) -{ 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'] ---------------------------------------- (77) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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 }-> 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'] ---------------------------------------- (79) 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' ---------------------------------------- (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 }-> 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'] ---------------------------------------- (81) 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 ---------------------------------------- (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 }-> 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'] ---------------------------------------- (83) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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 }-> 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'] ---------------------------------------- (85) 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 ---------------------------------------- (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') -{ 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] ---------------------------------------- (87) 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 ---------------------------------------- (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') -{ 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] ---------------------------------------- (89) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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') -{ 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] ---------------------------------------- (91) 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 ---------------------------------------- (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: {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] ---------------------------------------- (93) 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 ---------------------------------------- (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: {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] ---------------------------------------- (95) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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: {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] ---------------------------------------- (97) 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 ---------------------------------------- (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: {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] ---------------------------------------- (99) 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 ---------------------------------------- (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: {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] ---------------------------------------- (101) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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: {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] ---------------------------------------- (103) 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 ---------------------------------------- (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: {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] ---------------------------------------- (105) 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 ---------------------------------------- (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: {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] ---------------------------------------- (107) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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: {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] ---------------------------------------- (109) 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 ---------------------------------------- (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: {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] ---------------------------------------- (111) 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 ---------------------------------------- (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: {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] ---------------------------------------- (113) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (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) -{ 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] ---------------------------------------- (115) 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: ? ---------------------------------------- (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) -{ 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 ---------------------------------------- (117) 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: ? ---------------------------------------- (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) -{ 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 ---------------------------------------- (119) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (120) 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 ---------------------------------------- (121) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 60 trailing nodes: M4(z0) -> c60(#ABS(#pos(#s(#s(#0))))) M3(z0) -> c52(#ABS(#pos(#s(#s(#0))))) #ADD(#neg(#s(#0)), z0) -> c1(#PRED(z0)) #ABS(#neg(z0)) -> c25 #ADD(#0, z0) -> c M3(z0) -> c54(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) M3(z0) -> c51(#ABS(#pos(#s(#0)))) #SUCC(#0) -> c20 MULT#1(nil, z0) -> c81(#ABS(#0)) #PRED(#pos(#s(#0))) -> c18 M1(z0) -> c44(#ABS(#pos(#s(#s(#s(#s(#0))))))) TRANSACC#1(nil, z0) -> c93 SPLIT#3(tuple#2(z0, z1), z2, z3) -> c90 TRANSPOSE#3(nil, z0) -> c99 #MULT(#0, #0) -> c5 #MULT(#0, #neg(z0)) -> c6 M2(z0) -> c49(#ABS(#pos(#s(#s(#s(#s(#0))))))) M3(z0) -> c56(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c53(#ABS(#pos(#s(#s(#s(#0)))))) #MULT(#0, #pos(z0)) -> c7 M1(z0) -> c39(#ABS(#pos(#s(#0)))) #ABS(#s(z0)) -> c27 M3(z0) -> c58(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) #SUCC(#pos(#s(z0))) -> c23 M3(z0) -> c55(#ABS(#pos(#s(#s(#0))))) ATTACH#1(nil, z0) -> c32 #MULT(#neg(z0), #0) -> c8 #MULT(#pos(z0), #0) -> c11 #PRED(#pos(#s(#s(z0)))) -> c19 M1(z0) -> c42(#ABS(#pos(#s(#s(#0))))) M1(z0) -> c41(#ABS(#pos(#s(#s(#s(#0)))))) M1(z0) -> c40(#ABS(#pos(#s(#s(#0))))) MULT#2(nil, z0, z1) -> c84(#ABS(#0)) LINEMULT#1(nil, z0) -> c38 M4(z0) -> c62(#ABS(#pos(#s(#s(#s(#s(#0))))))) M4(z0) -> c61(#ABS(#pos(#s(#s(#s(#0)))))) SPLIT#2(nil, z0) -> c89 M2(z0) -> c50(#ABS(#pos(#s(#s(#s(#s(#s(#0)))))))) MATRIXMULTLIST#1(nil, z0) -> c74 M4(z0) -> c59(#ABS(#pos(#s(#0)))) M2(z0) -> c45(#ABS(#pos(#s(#0)))) #ABS(#pos(z0)) -> c26 M2(z0) -> c48(#ABS(#pos(#s(#s(#s(#0)))))) M3(z0) -> c57(#ABS(#pos(#s(#s(#s(#s(#0))))))) #PRED(#0) -> c16 TRANSPOSE#1(nil, z0) -> c96 M2(z0) -> c46(#ABS(#pos(#s(#s(#0))))) MAKEBASE#1(nil) -> c65 MATRIXMULT'#1(nil, z0) -> c70 M2(z0) -> c47(#ABS(#pos(#s(#s(#0))))) #ADD(#pos(#s(#0)), z0) -> c3(#SUCC(z0)) #PRED(#neg(#s(z0))) -> c17 #ABS(#0) -> c24 #NATMULT(#0, z0) -> c14 #SUCC(#neg(#s(#0))) -> c21 SPLIT#1(nil) -> c87 #SUCC(#neg(#s(#s(z0)))) -> c22 M1(z0) -> c43(#ABS(#pos(#s(#s(#s(#0)))))) ATTACH#2(nil, z0, z1) -> c34 MKBASE#1(nil) -> c78 ---------------------------------------- (122) 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 ---------------------------------------- (123) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (124) 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 ---------------------------------------- (125) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (126) 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 ---------------------------------------- (127) 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)) ---------------------------------------- (128) 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 ---------------------------------------- (129) 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))) ---------------------------------------- (130) 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 ---------------------------------------- (131) 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)) ---------------------------------------- (132) 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 ---------------------------------------- (133) 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] ---------------------------------------- (134) 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 ---------------------------------------- (135) 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] ---------------------------------------- (136) 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 ---------------------------------------- (137) 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)) ---------------------------------------- (138) 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 ---------------------------------------- (139) 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] ---------------------------------------- (140) 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 ---------------------------------------- (141) 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)) ---------------------------------------- (142) 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 ---------------------------------------- (143) 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)) = 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)) = 0 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)) = 0 POL(LINEMULT#1(x_1, x_2)) = 0 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)) = [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)) = 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_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] ---------------------------------------- (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)) 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 ---------------------------------------- (145) 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] ---------------------------------------- (146) 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 ---------------------------------------- (147) 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)) ---------------------------------------- (148) 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 ---------------------------------------- (149) 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] ---------------------------------------- (150) 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 ---------------------------------------- (151) 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] ---------------------------------------- (152) 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 ---------------------------------------- (153) 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] ---------------------------------------- (154) 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 ---------------------------------------- (155) 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 ---------------------------------------- (156) 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 ---------------------------------------- (157) 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)) ---------------------------------------- (158) 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 ---------------------------------------- (159) 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)) ---------------------------------------- (160) 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 ---------------------------------------- (161) 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)) ---------------------------------------- (162) 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 ---------------------------------------- (163) 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)) ---------------------------------------- (164) 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 ---------------------------------------- (165) 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)) ---------------------------------------- (166) 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 ---------------------------------------- (167) 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)))) ---------------------------------------- (168) 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 ---------------------------------------- (169) 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))) ---------------------------------------- (170) 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 ---------------------------------------- (171) 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)) ---------------------------------------- (172) 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 ---------------------------------------- (173) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: matrixMult(z0, z1) -> matrixMult'(z0, transAcc(z1, makeBase(z1))) ---------------------------------------- (174) 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 ---------------------------------------- (175) 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))) ---------------------------------------- (176) 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 ---------------------------------------- (177) 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))) ---------------------------------------- (178) 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 ---------------------------------------- (179) 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))) ---------------------------------------- (180) 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 ---------------------------------------- (181) 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)) ---------------------------------------- (182) 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 ---------------------------------------- (183) 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)) ---------------------------------------- (184) 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 ---------------------------------------- (185) 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)) ---------------------------------------- (186) 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 ---------------------------------------- (187) 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 ---------------------------------------- (188) 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 ---------------------------------------- (189) 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 ---------------------------------------- (190) 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 ---------------------------------------- (191) 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 ---------------------------------------- (192) 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 ---------------------------------------- (193) 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)) ---------------------------------------- (194) 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 ---------------------------------------- (195) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: TRANSPOSE#1(::(x0, x1), nil) -> c95(TRANSPOSE#2(tuple#2(nil, nil)), SPLIT(nil)) ---------------------------------------- (196) 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 ---------------------------------------- (197) 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 ---------------------------------------- (198) 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 ---------------------------------------- (199) 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 ---------------------------------------- (200) 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 ---------------------------------------- (201) 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)) ---------------------------------------- (202) 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 ---------------------------------------- (203) 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)))) ---------------------------------------- (204) 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 ---------------------------------------- (205) 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))) ---------------------------------------- (206) 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 ---------------------------------------- (207) 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)) ---------------------------------------- (208) 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 ---------------------------------------- (209) 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))) ---------------------------------------- (210) 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 ---------------------------------------- (211) 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))) ---------------------------------------- (212) 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 ---------------------------------------- (213) 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)) ---------------------------------------- (214) 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 ---------------------------------------- (215) 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)) ---------------------------------------- (216) 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 ---------------------------------------- (217) 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)) ---------------------------------------- (218) 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 ---------------------------------------- (219) 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)) ---------------------------------------- (220) 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 ---------------------------------------- (221) 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)) ---------------------------------------- (222) 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 ---------------------------------------- (223) 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)) ---------------------------------------- (224) 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 ---------------------------------------- (225) 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)) ---------------------------------------- (226) 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 ---------------------------------------- (227) 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)) ---------------------------------------- (228) 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 ---------------------------------------- (229) 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)) ---------------------------------------- (230) 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 ---------------------------------------- (231) 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)) ---------------------------------------- (232) 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 ---------------------------------------- (233) 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)) ---------------------------------------- (234) 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 ---------------------------------------- (235) 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)) ---------------------------------------- (236) 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 ---------------------------------------- (237) 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)) ---------------------------------------- (238) 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 ---------------------------------------- (239) 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)) ---------------------------------------- (240) 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 ---------------------------------------- (241) 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))) ---------------------------------------- (242) 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 ---------------------------------------- (243) 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)))))) ---------------------------------------- (244) 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 ---------------------------------------- (245) 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))) ---------------------------------------- (246) 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 ---------------------------------------- (247) 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)))) ---------------------------------------- (248) 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 ---------------------------------------- (249) 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))) ---------------------------------------- (250) 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 ---------------------------------------- (251) 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)) ---------------------------------------- (252) 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 ---------------------------------------- (253) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: MATRIXMULT3(nil, x1, x2) -> c(MATRIXMULT(nil, x2)) ---------------------------------------- (254) 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 ---------------------------------------- (255) 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)) ---------------------------------------- (256) 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 ---------------------------------------- (257) 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)) ---------------------------------------- (258) 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 ---------------------------------------- (259) 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))) ---------------------------------------- (260) 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#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)) 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: 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, 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, c94_1 ---------------------------------------- (261) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace TRANSPOSE#1(::(x0, x1), x2) -> c95(SPLIT(x2)) by TRANSPOSE#1(::(x0, x1), ::(x0, x1)) -> c95(SPLIT(::(x0, x1))) ---------------------------------------- (262) 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#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)) 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)) TRANSPOSE(::(x0, x1)) -> c94(TRANSPOSE#1(::(x0, x1), ::(x0, x1))) TRANSPOSE#1(::(x0, x1), ::(x0, x1)) -> c95(SPLIT(::(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#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))) TRANSPOSE#1(::(x0, x1), ::(x0, x1)) -> c95(SPLIT(::(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, MATRIXMULTLIST#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, 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, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c73_2, c73_1, c83_1, c95_2, c95_1, c94_1 ---------------------------------------- (263) CdtInstantiationProof (BOTH BOUNDS(ID, ID)) Use instantiation to replace TRANSPOSE#1(::(x0, x1), ::(::(z0, z1), z2)) -> c95(TRANSPOSE#2(split#3(split(z2), z0, z1)), SPLIT(::(::(z0, z1), z2))) by TRANSPOSE#1(::(::(z2, z3), x1), ::(::(z2, z3), x1)) -> c95(TRANSPOSE#2(split#3(split(x1), z2, z3)), SPLIT(::(::(z2, z3), x1))) ---------------------------------------- (264) 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#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)) 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), ::(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)) TRANSPOSE(::(x0, x1)) -> c94(TRANSPOSE#1(::(x0, x1), ::(x0, x1))) TRANSPOSE#1(::(x0, x1), ::(x0, x1)) -> c95(SPLIT(::(x0, x1))) TRANSPOSE#1(::(::(z2, z3), x1), ::(::(z2, z3), x1)) -> c95(TRANSPOSE#2(split#3(split(x1), z2, z3)), SPLIT(::(::(z2, z3), 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#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))) TRANSPOSE#1(::(x0, x1), ::(x0, x1)) -> c95(SPLIT(::(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, MATRIXMULTLIST#1_2, TRANSPOSE#1_2, MATRIXMULT3_3, 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, c97_1, c98_1, c2_1, c4_1, c88_1, c_1, c92_2, c83_2, c73_2, c73_1, c83_1, c95_2, c95_1, c94_1